TextEvent 모니터링 등록 방법

Print

Text 기반 event 를 감지하기 위한, TextEvent 모니터링 등록 방법에 대한 안내 문서입니다. 수집 대상인 Client 에 수집기인 fleuntd를 설치하고 설정하는 방법과 ZMC 에서 해당 이벤트 알림을 등록하는 방법을 안내합니다.

Instructions

다음의 절차로 진행합니다.

  1. Client 에 수집기 fluentd 설치

  2. TextEvent 수집을 위한 fleuntd 설정 파일 생성

  3. 서비스 시작

  4. ZMC 에 alert 등록


1. Client 에 수집기 fluentd 설치

각 os 의 환경에 맞도록 fluentd 를 설치합니다. Private network 에서는 internet 이 연결된 서버에서 설치 파일을 다운로드한 후, 해당 파일을 업로드하여 설치합니다.

  • Linux
# fluentd 설치 (default path : /opt/td-agent)
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh

# 필수 plugin 설치
$ /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-grafana-loki -v 1.2.12
  • Windows
# fluentd 설치 파일 다운로드 (defautl path : C:\opt\td-agent)
http://packages.treasuredata.com.s3.amazonaws.com/3/windows/td-agent-3.7.1-0-x64.msi해당 파일을 다운로드 후 설치 

# 필수 plugin 설치
PS> C:\opt\td-agent\embedded\bin\fluent-gem install fluent-plugin-grafana-loki -v 1.2.12

# [옵션] windows eventlog 용 plugin 설치
PS> C:\opt\td-agent\embedded\bin\fluent-gem install fluent-plugin-windows-eventlog -v 0.6.0
  • Private network 에서의 설치를 위한 다운로드
# Linux 나 Windows 모두 대상 파일을 다운로드 하여, 설치 대상 파일에 업로드 하여 설치합니다.

## linux
# downsload
$ curl https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh -o install-redhat-td-agent3.sh
$ curl https://rubygems.org/downloads/fluent-plugin-grafana-loki-1.2.12.gem -o fluent-plugin-grafana-loki-1.2.12.gem

# install
$ sh install-redhat-td-agent3.sh
$ 


## Windows
# download
PS> curl http://packages.treasuredata.com.s3.amazonaws.com/3/windows/td-agent-3.7.1-0-x64.msi -o td-agent-3.7.1-0-x64.msi
PS> curl https://rubygems.org/downloads/fluent-plugin-grafana-loki-1.2.12.gem -o fluent-plugin-grafana-loki-1.2.12.gem
# [opt] windows event 감시 용 파일
$ curl https://rubygems.org/downloads/fluent-plugin-windows-eventlog-0.6.0.gem -o fluent-plugin-windows-eventlog-0.6.0.gem

# msi 설치 후, plugin 설치
# C:\opt\td-agent\embedded\bin\fluent-gem install <plugin 경로>
PS> C:\opt\td-agent\embedded\bin\fluent-gem install fluent-plugin-grafana-loki-1.2.12.gem
# [opt] windows event 감시 용 파일
PS> C:\opt\td-agent\embedded\bin\fluent-gem install fluent-plugin-windows-eventlog-0.6.0.gem

2. TextEvent 수집을 위한 fluentd 설정 파일 생성

다음은 주로 사용하는 샘플을 설정해 둔 것으로, 각 사용자의 환경에 맞도록 변경하실 때 참고하시기를 바랍니다.

기본적인 설정파일의 구조

Input -> filter 1 -> ... -> filter N -> Output

  • Input<source> 지시어(directive)에서 설정한대로 유입된 data stream 이, pipeline 으로 Output<match> 지시어까지 동작합니다.

tag

  • tag 라는 내부 제어 pattern 을 통해 해당 pipeline 에서 data stream 의 방향을 제어할 수 있습니다.

  • tag. 으로 구분한 문자열입니다.
    e.g. myapp.access.type1

  • tag<source> 지시어 내부에서 선언하고, <filter>, <match> 등 각각의 지시어에서 분기로써 선언해주면 됩니다.
    e.g. tag 이름을 myapp.access.type1 이라고 가정하면,
    <filter myapp.access.type1> , <match myapp.**> 등으로 선언하여 분기할 수 있습니다.

Wildcards and Expansions

  • *tag 의 한 부분을 의미함.
    e.g. a.*a.b 라는 tag 는 포함하지만, aa.b.c 는 포함하지 않음.

  • **tag 에서 0… 의 regular expression 표현의 의미임.
    e.g. a.**a, a.b, a.b.c 모두를 포함함.

  • 기타 자세한 원리는 [링크] 참고

ZMON 에서의 형식

<match> 로 제공되는 필수 data record 구조는 다음과 같습니다.

hostname  # OS 의 hosts 파일 내 저장된 hostname
pattern   # "line append" 나 특정 문자열의 pattern
target    # 감시 대상 파일의 절대경로
count     # 해당 event 가 발생된 수
log       # 발생된 text
label_tag # ZMON 에서 데이터 구분 단위로, 각 target 마다 unigue 한 값 설정

많이 쓰이는 Sample 설정

##### sample 1) 특정 파일에 대한 line append 로 수집하는 설정

<source>
  @type tail

  ##### 로그 감시 대상 파일 절대 경로
  path C:/opt/td-agent/lineappend.txt
  path_key trailed_path

  ##### 로그 감시 대상 파일의 offset 저장
  ##### 여러 source 에 대해서 하나의 pos_file 을 지정해도 되며,
  ##### target 파일이 지워지고 새 파일이 생성되면 처음부터 읽게 됨.
  pos_file C:/opt/td-agent/offset.pos

  tag sample.lineappend.1
  
  <parse>
    @type none
  </parse>
</source>

##### lineappend filter
<filter sample.lineappend.**>
  @type record_transformer
  <record>
    hostname "#{Socket.gethostname}"
    pattern "line append"
    target ${record["trailed_path"]}
    count 1
    log ${record["message"]}
     
    label_tag "${tag}"
  </record>
 
  renew_record true
  keep_keys label_tag, hostname, pattern, target, count, log
 
</filter>
 
<match sample.**>
  @type loki
  url https://aaa-loki.zmon.cloud
 
  line_format json
 
  <label>
    label_tag
  </label>
 
  <buffer>
    flush_interval 10s
    flush_at_shutdown true
  </buffer>
</match>

##### sample 2) 특정 파일에서 parsing 해서 원하는 형태로 수집하는 설정

<source>
  @type tail

  ##### 로그 감시 대상 파일 절대 경로
  path C:/opt/td-agent/test.txt
  path_key trailed_path

  ##### 로그 감시 대상 파일의 offset 저장
  pos_file C:/opt/td-agent/offset.pos

  tag sample.parse.1
  
  <parse>
    @type regexp
    expression /\[(?<pattern>[^\]]*)\]:\[(?<svc_name>[^\]]*)\]:\[(?<bbb>[^\]]*)\]:\[(?<ccc>[^\]]*)\]/
  </parse>
</source>

##### parse log filter
<filter sample.parse.**>
  @type record_transformer
  <record>
    hostname "#{Socket.gethostname}"
    pattern ${record["pattern"]}
    target ${record["trailed_path"]}
    count 1
    log ${record["aaa"]} ${record["bbb"]} ${record["ccc"]}
 
    label_tag "${tag}"
  </record>
 
  renew_record true
  keep_keys label_tag, hostname, pattern, target, count, log
 
</filter>

<match sample.**>
  @type loki
  url https://aaa-loki.zmon.cloud
 
  line_format json
 
  <label>
    label_tag
  </label>
 
  <buffer>
    flush_interval 10s
    flush_at_shutdown true
  </buffer>
</match>

##### sample 3) 특정 파일에서 특정 pattern 을 수집하는 설정

<source>
  @type tail

  ##### 로그 감시 대상 파일 절대 경로
  path C:/opt/td-agent/test.txt
  path_key trailed_path

  ##### 로그 감시 대상 파일의 offset 저장
  pos_file C:/opt/td-agent/offset.pos

  tag sample.parse.1
  
  <parse>
    @type regexp
    expression /\[(?<pattern>[^\]]*)\]:\[(?<svc_name>[^\]]*)\]:\[(?<bbb>[^\]]*)\]:\[(?<ccc>[^\]]*)\]/
  </parse>
</source>

##### <pattern> 의 값이 "reg_exp" 이고
##### <svc_name> 이 "not_this_type" 아닌 것만 다음으로 넘어감. 
<filter sample.parse.**>
  @type grep
  <regexp>
    key pattern
    pattern /reg_exp/
  </regexp>
  <exclude>
    key svc_name
    pattern /not_this_type/
  </exclude>
</filter>

##### parse log filter
<filter sample.parse.**>
  @type record_transformer
  <record>
    hostname "#{Socket.gethostname}"
    pattern ${record["pattern"]}
    target ${record["trailed_path"]}
    count 1
    log ${record["aaa"]} ${record["bbb"]} ${record["ccc"]}
 
    label_tag "${tag}"
  </record>
 
  renew_record true
  keep_keys label_tag, hostname, pattern, target, count, log
 
</filter>

<match sample.**>
  @type loki
  url https://aaa-loki.zmon.cloud
 
  line_format json
 
  <label>
    label_tag
  </label>
 
  <buffer>
    flush_interval 10s
    flush_at_shutdown true
  </buffer>
</match>

##### sample 4) windows eventlog 를 수집하는 설정

<source>
  @type windows_eventlog
  @id windows_eventlog
  
  ##### 필요한 
  channels application,system,security
  tag sample.winevt.1
  <storage>
    @type local
    persistent 
    path C:/opt/td-agent/winevt.pos
  </storage>
</source>

<filter sample.winevt.**>
  @type record_transformer
  <record>
    hostname "#{Socket.gethostname}"
    pattern ${record["channel"]}
    target "windows eventlog"
    count 1
    
    ##### 가능한 key
    ##### channel, record_number, event_id, event_type, event_category,
    ##### source_name, description 
    log ${record["event_type"]}:${record["event_id"]}}:${record["source_name"]}
    
    label_tag "${tag}"
  </record>
  renew_record true
  keep_keys label_tag, hostname, pattern, target, count, log
</filter>

<match sample.**>
  @type loki
  url https://aaa-loki.zmon.cloud
 
  line_format json
 
  <label>
    label_tag
  </label>
 
  <buffer>
    flush_interval 10s
    flush_at_shutdown true
  </buffer>
</match>

3. 서비스 시작

linux

linux 의 경우 설치 시 td-agent.service 로 기본 등록이 됩니다 (systemd 의 경우). 이 때 configuration 파일의 위치는 /etc/td-agent/td-agent.conf 를 기본 경로로 갖게 되며, log 파일의 위치는 /var/log/td-agent/td-agent.log 가 기본 경로로 됩니다.

# systemd  (/etc/systemd/system/td-agent.service)
$ sudo systemctl start/stop/status/restart td-agent.service

# init.d (/etc/init.d/td-agent)
$ sudo /etc/init.d/td-agent start/stop/status/restart

windows

windows의 경우 직접 서비스 및 config 파일의 위치 및 log 파일의 위치를 서비스로 등록할 수 있습니다. 다음의 예시에서는 configuration 파일의 위치는 C:/opt/td-agent/windows-svc.conf 로, log 파일의 위치는 C:/opt/td-agent/td-agent.log 로 설정하였습니다.

PS> fluentd --reg-winsvc i
## fluentd --reg-winsvc-fluentdopt '-c {config 파일 절대 경로} -o {log 파일 절대 경로}'
ps> fluentd --reg-winsvc-fluentdopt '-c C:/opt/td-agent/windows-svc.conf -o C:/opt/td-agent/td-agent.log'

4. ZMC 에 alert 등록

기본적으로 ZMC 의 rule 을 등록하는 방법은 별도로 제공되는 다음 [link] 를 참고해주시기 바랍니다.

linux rule 등록 : SERVER-Linux-Text Event

windows rule 등록 : SERVER-Windows-Text Event

[공통] 세부 등록

  • Metric : rule 을 구분할 수 있는 이름으로 수정이 가능합니다.

  • Target : config 파일 내의 path 에 해당하는 값을 정확하게 입력해주시면 됩니다. (대소문자 및 \, / 구분 등)

  • Status Condition : 현재는 Count 값이 1 이상일 때에만 발생되도록 설정이 가능합니다.

  • Level : 경고 (P1), 주의 (P5) 의 값으로 ZCARE 의 전파 단계를 구분합니다.

Opsgenie 전파 단계

P1 - Critical -경고

P2 - High

P3 - Moderate

P4 - Low

P5 - Informational - 주의

  • Message : 빈 값일 경우 config 파일의 Log 에 해당하는 데이터가 전송이 되며, 특정 값을 입력하실 경우 입력한 값이 전송됩니다.

text 의 수집은 잘못 설정하실 경우 많은 network traffic 및 저장공간을 차지하게 됩니다. 그러므로 필요에 맞게 정확한 fluentd 의 설정을 위해 다음의 정보를 통해 정확히 원하시는 text만 수집할 수 있도록 설정하시기를 권고합니다.

  • fluentd official document URL (영문) [LINK]

  • ZMC 사용 방법 guide URL [LINK]

이 답변이 유용합니까? 아니오

Send feedback
도움을 드리지 못해 죄송합니다. 피드백을 주시면 이 문서의 품질을 높이겠습니다.