반응형
개요
Rsyslog로 수집되는 Log를 elasticsearch로 indexing 하는 방법
- 방법은 여러가지가 있겠지만 간단히 아래 3개지 방법으로 indexing이 가능할 것 같다.
- rsyslog로 수집하는 로그를 json으로 변환하고 rsyslog omelasticsearch 모듈을 이용하여 elasticsearch 에 indexing.
- rsyslog omfwd 모듈을 이용하여 logstash로 포워드
- omfile 모듈을 이용하여 file log를 쌓고 filebeat로 수집
- 여기서는 DELL EMC SAN Storage 의 로그를 수집하는 것이 목적으로 아래 내용과 크게 상관이 없을 수 있다.
설정
DELL EMC SAN Storage Log 설정
- facility, priority 등의 설정은 없고 syslog 로그수집 호스트 설정만 있다.
- 실제로 특정 facility에 국한되어 들어오지 않고 ntp, daemon, user 등 다양한 타입으로 전송된다.
rsyslog json log format template 설정
- template option "option.jsonf="on"" 을 사용하지 않고 직접(?) json 형식을 만드는 것으로 했다.
- constant 로 json 모양과 key값을, property로 실제 값과 옵션등으로 value 를 표출한다.
> /etc/rsyslog.conf
template(name="json_syslog" type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"")
property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"log_template\":\"json_syslog")
constant(value="\",\"tag\":\"")
property(name="syslogtag" format="json")
constant(value="\",\"relayhost\":\"")
property(name="fromhost")
constant(value="\",\"relayip\":\"")
property(name="fromhost-ip")
constant(value="\",\"logsource\":\"")
property(name="source")
constant(value="\",\"hostname\":\"")
property(name="hostname" caseconversion="lower")
constant(value="\",\"program\":\"")
property(name="programname")
constant(value="\",\"priority\":\"")
property(name="pri")
constant(value="\",\"severity\":\"")
property(name="syslogseverity")
constant(value="\",\"facility\":\"")
property(name="syslogfacility")
constant(value="\",\"severity_label\":\"")
property(name="syslogseverity-text")
constant(value="\",\"facility_label\":\"")
property(name="syslogfacility-text")
constant(value="\",\"message\":\"")
property(name="rawmsg" format="json")
constant(value="\",\"end_msg\":\"")
constant(value="\"}\n")
}
- template output json
{
"@timestamp": "***",
"log_template": "json_syslog",
"tag": "phd",
"relayhost": "10.10.40.216",
"relayip": "10.10.40.216",
"logsource": "sn358340",
"hostname": "sn358340",
"program": "phd",
"priority": "15",
"severity": "7",
"facility": "1",
"severity_label": "debug",
"facility_label": "user",
"message": "****""
}
rsyslog elasticsearch module 설치
- rsyslog 는 elasticsearch module을 제공하고 패키지 관리자를 통해 간단히 설치 가능하다.
yum install rsyslog-elasticsearch
- 설치한 모듈을 로드한다.
> /etc/rsyslog.conf
module(load="omelasticsearch")
rsyslog searchindex template
- elasticsearch index를 위한 template 설정
- {index name}-{date} 형식을 위한 template로 분기문 action에서 "dynSearchIndex="on"" 옵션과 같이 사용한다.
> /etc/rsyslog.conf
template(name="elasticsearch-index" type="string" string="sanstorage-%$YEAR%.%$MONTH%.%$DAY%")
rsyslog 분기문 설정
- DELL EMC SAN Storage log 는 facility, priority등의 설정이 없어 분기문을 이용하여 san storage에서 오는 로그를 따로 수집할 필요가 있다.
- 이 경우 hostname이나 fromhost-ip 등으로 분기문을 이용하여 설정한다.(설명은 omelasticsearch 부분 참조)
- elasticsearch(omelasticsearch), logstash(omfwd), filebeat(omfile) 3가지 방법을 분기문 action을 이용하여 설정 할 수 있다.
omelasticsearch
- elasticsearch로 바로 indexing 하는 방법
- uid : elasticsearch user
- pwd : elasticsearch password
- dynSearchIndex="on" : 이옵션을 searchIndex를 string으로 사용 할건지 위에서 만든 template name "elasticsearch-index"를 사용할 건지를 결정한다.
- omelasticsearch 모듈의 설명은 https://www.rsyslog.com/doc/v8-stable/configuration/modules/omelasticsearch.html 을 참조
> /etc/rsyslog.conf
# hostname 이용
if $hostname == 'sn358340' then {
action(type="omelasticsearch" server="localhost" serverport="9200" template="json_syslog" searchIndex="elasticsearch-index" uid="elastic" pwd="alxndhs" dynSearchIndex="on")
}
# fromhost-ip 이용
if $fromhost-ip == '10.10.40.216' then {
action(type="omelasticsearch" server="localhost" serverport="9200" template="json_syslog" searchIndex="elasticsearch-index" uid="***" pwd="***" dynSearchIndex="on")
}
omfwd
- omfwd 모듈은 외부 포워드 모듈로 json으로 변환된 로그를 logstash로 포워드할 수 있다.
- omfwd모듈의 설명은 https://www.rsyslog.com/doc/v8-stable/configuration/modules/omfwd.html 을 참조
if $hostname == 'sn358340' then {
action(type="omfwd" target="localhost" port="5044" protocol="tcp" template="json_syslog")
}
omfile
- omfile로 출력되는 log file을 filebeat를 이용하여 수집한다.
- omfile모듈의 설명은 https://www.rsyslog.com/doc/v8-stable/configuration/modules/omfile.html 을 참조
if $hostname == 'sn358340' then {
action(type="omfile" file="/var/log/san_storage.log" template="json_syslog")
}
반응형
'Monitoring Tools > ELK Stack' 카테고리의 다른 글
[elasticsearch] Query DSL 관련성 점수(Relevance score) (0) | 2024.06.28 |
---|---|
[Elasticsearch] Validation Failed: 1: this action would add [2] shards, but this cluster currently has [999]/[1000] maximum normal shards open (0) | 2023.03.27 |
11.1 metricbeat system modules 사용하기 (0) | 2022.05.06 |
11. metricbeat 설치(windows agent) (0) | 2022.05.06 |
10. xpack security 적용 (0) | 2022.04.26 |