본문 바로가기
BIG-DATA/FILEBEAT

[FILEBEAT] 무작정 시작하기 (3) - output.kafka

by 허도치 2019. 11. 26.

2019/11/25 - [BIG-DATA/FILEBEAT] - [FILEBEAT] 무작정 시작하기 (1) - 설치 및 실행

2019/11/25 - [BIG-DATA/FILEBEAT] - [FILEBEAT] 무작정 시작하기 (2) - Multiline

 

 

  지난 포스트까지는 Filebeat으로 수집한 Beat를 Console로 내보내면서 무의미하게 소비되었는데, 이번 포스트에서는 Kafka에 적재하여 데이터를 보관하고 Consumer를 통해 소비하는 방법을 소개하려고 한다. 이번 포스트는 Kafka와 약간의 Python을 사용한다. Python은 간단하게 설치하고 소스를 붙여넣으면 끝낼 수 있으나, Kafka는 반드시 선행학습해야 하므로 현재 블로그의 '[KAFKA] 무작정 시작하기'를 참고하길 바란다.

 

 

1. Filebeat 설정.

   1-1. [ ./conf.d/chrome_kafka.yml ] 작성.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
filebeat.inputs:
- type: log
  enabled: true
  document_type: BROWSER
  paths:
    - C:\work\chrome\chrome_debug.log
  fields:
    index_name: "CHROME"
    topic_name: "local-topic"
 
  multiline.pattern: '^\[\d+:\d+:\d+[/]\d+[.]\d+[:]'
  multiline.negate: true
  multiline.match: after
  
  encoding: utf-8
 
  
output.kafka:
  enabled: true
  hosts: [ 'localhost:9093' ]
  topic: '%{[fields.topic_name]}'
  
  partition.round_robin:
    reachable_only: false
 
  required_acks: 1
  
  sasl.mechanism: PLAIN
  username: producer
  password: dochi
  
  codec.json:
    pretty: false
  
 
logging.level: debug
path.data: C:\work\filebeat-7.3.1\data
path.logs: C:\work\filebeat-7.3.1\logs
cs

         - 이전 포스트에서 작성한 [ chrome.yml ]을 재활용.

         - 9 ln: kafka의 topic 이름.

         - 15 ln: 한글을 처리하다보니 깨지는 현상이 발생하여 encoding 추가.

         - 18 ln: beat를 kafka로 내보냄.

         - 19 ln: 사용여부

         - 20 ln: Kafka의 Leader가 데이터를 받았는지 확인하는 Process.

         - 28~30 ln: Kafka SASL 인증 설정.

         - 32~33 ln: Beat를 json으로 내보냄.

 

 

2. Kafka Consumer Client 생성.

   2-1. Python 3.7.4 버전 기준으로 진행.

         - Kafka 패키지가 다양하게 있는데, 가장 직관적인 [ confluent-kafka ]를 사용.

         - confluent-kafka: https://github.com/confluentinc/confluent-kafka-python

 

confluentinc/confluent-kafka-python

Confluent's Apache Kafka Python client. Contribute to confluentinc/confluent-kafka-python development by creating an account on GitHub.

github.com

 

   2-2. [ confluent-kafka ] 패키지 설치.

1
pip install confluent_kafka
cs

         - OSX나 LINUX에 기본으로 설치된 python으로 SASL을 사용하려면 아래 명령어를 추가로 실행.

1
pip install --no-binary :all: confluent-kafka
cs

 

   2-3. [ consumer.py ] 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from confluent_kafka import Consumer, KafkaError
 
= Consumer({
    'client.id''dochi',
    'group.id''local-group',
    'bootstrap.servers''localhost:9093',
    'auto.offset.reset''latest',
    'security.protocol''SASL_PLAINTEXT',
    'sasl.mechanism''PLAIN',
    'sasl.username''dochi',
    'sasl.password''dochi',
})
 
c.subscribe(['local-topic'])
 
while True:
    msg = c.poll(0.1)
 
    if msg is None:
        continue
    if msg.error():
        print( msg.error() )
        continue
        
    message = msg.value().decode('utf-8')
 
    print( message )
 
c.close()
cs

         - 3~12 ln: 기본적인 Kafka Connection 설정과 SASL 설정.

         - 14 ln: 구독할 topic 설정.

         - 16 ln: 한번 연결하고 계속 데이터를 가지고 올 것이기 때문에 무한루프로 실행.

         - 17 ln: 0.1초마다 메시지나  이벤트, 오류를 체크함.

 

 

3. 실행.

   3-1. Chrome Debug 모드로 실행.

1
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --enable-logging --v=1 --user-data-dir=C:\work\chrome
cs

        - Chrome이 실행되면 로그를 쌓기위해 검색도하고 클릭도 해줌.

 

   3-2. Zookeeper Server 실행.

1
C:\work\kafka_2.12-2.1.0\zookeeper_server_start.bat
cs

 

   3-3. Kafka Server 실행.

1
C:\work\kafka_2.12-2.1.0\kafka_server_start.bat
cs

 

   3-4. Filebeat 실행. ( Producer Client )

1
2
cd C:\work\filebeat-7.3.1
filebeat run --c ./conf.d/chrome_kafka.yml -d publish
cs

        - 실행되면 Beat를 전송할 때, Kafka에 Connection 되는 모습을 확인할 수 있음.

 

   3-5. Consumer Client 실행.

1
python C:\work\kafka_2.12-2.1.0\consumer.py
cs

         - 실행하면 현재 메시지 큐에 있는 데이터를 가져오는 것이 확인됨.

 

 

 

  지금까지 Filebeat에서 수집한 로그를 Kafka에 적재하여 보았다. 그러나, 보내지는 로그들은 쌓이는 그대로 전송되기 때문에 IP주소나 계정정보 같이 민감한 정보가 그대로 보내질 수 있으며 불필요한 데이터들 때문에 비용이 낭비될 수 있다. 이러한 문제를 해결하기위해 Filebeat과 수신자 사이에서 데이터를 분석하고 변환해주는 역할을 해주는 Logstash가 있다. Logstash에 대한 포스트가 준비되어 있으니 참고하길 바란다.

 

 

 

2019/11/26 - [BIG-DATA/LOGSTASH] - [LOGSTASH] 무작정 시작하기 (1) - 설치 & 실행

댓글