Producer Overview
Kafka에서의 Producer는 메시지를 생산하는 주체
로서, 일반적으로 개발 언어를 이용해 구성하는 것이 일반적이다. 단, 기본적인 Producer는 Kafka에서 제공은 된다.
Telegraf Producer 구성
Overview에서 명시했지만, 일반적으로 Producer 개발을 통해 생산해야 하지만, Telegraf에서는 이 Producer를 Plugin 형태로 기본 제공 한다.
- Telegraf의 플러그인 지원 확인
# telegraf --output-list |grep kafka
kafka
!참고 : Kafka Broker로의 입수를 수행해야하므로, output Plugin을 확인해야 한다.
- Telegraf input plugin 설정
# cat /etc/telegraf/telegraf.d/kafka.conf
[[outputs.kafka]]
brokers = ["broker01:9092", "broker02:9092", "broker03:9092"]
topic = "TELEGRAF"
#data_format = "json"
data_format = "influx"
!참고 : InfluxDB Format과 더불어 JSON 형식으로도 출력을 지원한다.
- Telegraf 데몬을 재기동
# systemctl restart telegraf
- Kafka 입수 테스트
# telegraf --config /etc/telegraf/telegraf.conf --output-filter kafka --test
2022-06-09T02:02:21Z I! Starting Telegraf
> swap,host=호스트네임,hostname=${hostname},idc=${idc},ipv4=${ipv4},role=${role},svrtype=${svrtype} free=3691507712i,total=4294963200i,used=603455488i,used_percent=14.050306368166321 1654740141000000000
> swap,host=호스트네임,hostname=${hostname},idc=${idc},ipv4=${ipv4},role=${role},svrtype=${svrtype} in=484429824i,out=948281344i 1654740141000000000
> system,host=호스트네임,hostname=${hostname},idc=${idc},ipv4=${ipv4},role=${role},svrtype=${svrtype} load1=1.38,load15=4,load5=3.37,n_cpus=8i,n_users=1i 1654740141000000000
...중략
상기와 같이 정상적으로 생산되는 것을 확인할 수 있다.
Telegraf Ansible 배포 이슈
현재 모니터링 시스템의 데이터 수집은 다음과 같다.
- 단일 시스템에 대한 리소스를 수집 한다.
- 특정
Farm
(또는Group
)에 대한집계
도 수행 한다.
따라서 Ansible의 병렬 host 수행 동작(Telegraf 재기동
)에 대한 대량의 작업 시 Fram 또는 Group의 리소스가 순차적으로 누락되는 이슈가 발생된다. 따라서 시간이 좀 소요되더라도, 리소스 수집에 대한 누락이 발생되면 안되기 때문에 다음과 같이 pause 모듈을 통해 이를 개선 한다.
- Telegraf 설정 변경에 대한 Task의 내용 이다.
---
- name: Get telegraf version
yum: list=telegraf
register: telegraf_info
- name: set telegraf version
set_fact:
telegraf_version: "{{ telegraf_info|json_query(jsonquery)|first }}"
vars:
jsonquery: "results[?yumstate=='installed'].version"
- debug:
var: telegraf_version
- name: Set base config
template :
src: "telegraf.conf.j2"
dest: "{{ telegraf_config_file }}"
owner: "{{ telegraf_owner }}"
group: "{{ telegraf_group }}"
- name: Set dynamic tags
template:
src: "telegraf_env.conf.j2"
dest: /etc/default/telegraf
owner: root
group: root
mode: 0644
notify:
- Restarted telegraf
- name: Pause for 5 minutes to Ansible Host
pause:
minutes: 5
아래의 Task가 바로 호스트 별로 5분 간 멈춤을 의미 한다.
pause:
minutes: 5
위의 Playbook의 적용 결과, 리소스에 대한 누락이 발생되지 않았다.