telegraf 와 influxDB 다운 받는/설치 하는 곳 

portal.influxdata.com/downloads/

 

 

grafana 는 influxDB 등과 같은 data source로부터 시계열 데이터를 가져와서

그래프로 그려주는 오픈소스 모니터링 툴

아래 링크가 그라파나에 대해 자세히 설명해 줌.

https://medium.com/finda-tech/grafana%EB%9E%80-f3c7c1551c38

 

 

 

influxDB 는 시계열을 저장하는 데이터베이스.

http api 를 통해서 데이터를 넘겨받는 것이 가능함.

 

 

jolokia 는 JMX (Java metric API 라고 생각하자)를 HTTP로 변환하여

자바 metric 정보를 influxDB 안에 넣을 수 있도록 도와줌.
Jolokia는 JVM에서 배포될 수 있는 에이전트로서, REST 같은 HTTP 엔드포인트를 통해 MBeans를 노출시켜, 이 모든 정보가 동일한 호스트에서 작동하는 비 자바 애플리케이션에 쉽게 제공되도록 합니다.
https://www.elastic.co/kr/blog/monitoring-java-applications-with-metricbeat-and-jolokia

 

 

telegraf 는 다양한 data source 로부터 쉽게 metric 데이터를 수집할 수 있도록 도와줌.

plugin plugout 등의 기능이 있는데, 이 기능을 통해 데이터 수집과 전달을 쉽게 도와줌.

예를 들어 jvm 의 metric 을 수집하고 싶다면, jolokia plugin 을 꽂으면(telegraf.conf 에 정보를 넣음) 된다.

( 참고로 telegraf 가 실행중인 system 의 cpu, memory, disk 등의 metric 정보를 기본적으로 수집함. )

 

telegraf 에서 jolokia 의 도움을 받아(input plugin 으로 설정함으로) jvm 의 metric 정보를 수집할 수 있게 됨.

jvm 의 metric 정보 수집시 JSON-over-HTTP protocol 을 이용한 REST endpoints 사용.

https://docs.influxdata.com/telegraf/v1.15/plugins/#jolokia2_agent

https://github.com/influxdata/telegraf/tree/master/plugins/inputs/jolokia2

telegraf 에서 데이터를 수집하기 위해선 해당  input plugin 을 넣으면 된다.

https://docs.influxdata.com/telegraf/v1.15/plugins/

https://github.com/influxdata/telegraf/tree/master/plugins/inputs

예를 들어 jvm 의 데이터를 수집하기 위해선 (jolokia 의 도움을 받아) 다음과 같은 옵션값들을 telegraf.conf 에 넣는다.


< telegraf.conf >

# Input plugin for JVM metrics

[[inputs.jolokia2_agent]]
 urls = ["http://localhost:8778/jolokia"]

[[inputs.jolokia2_agent.metric]]
 name = "java_runtime"
 mbean = "java.lang:type=Runtime"
 paths = ["Uptime"]

[[inputs.jolokia2_agent.metric]]
 name = "java_memory"
 mbean = "java.lang:type=Memory"
 paths = ["HeapMemoryUsage", "NonHeapMemoryUsage", "ObjectPendingFinalizationCount"]

[[inputs.jolokia2_agent.metric]]
 name = "java_garbage_collector"
 mbean = "java.lang:name=*,type=GarbageCollector"
 paths = ["CollectionTime", "CollectionCount"]
 tag_keys = ["name"]

[[inputs.jolokia2_agent.metric]]
 name = "java_last_garbage_collection"
 mbean = "java.lang:name=*,type=GarbageCollector"
 paths = ["LastGcInfo"]
 tag_keys = ["name"]

[[inputs.jolokia2_agent.metric]]
 name = "java_threading"
 mbean = "java.lang:type=Threading"
 paths = ["TotalStartedThreadCount", "ThreadCount", "DaemonThreadCount", "PeakThreadCount"]

[[inputs.jolokia2_agent.metric]]
 name = "java_class_loading"
 mbean = "java.lang:type=ClassLoading"
 paths = ["LoadedClassCount", "UnloadedClassCount", "TotalLoadedClassCount"]

[[inputs.jolokia2_agent.metric]]
 name = "java_memory_pool"
 mbean = "java.lang:name=*,type=MemoryPool"
 paths = ["Usage", "PeakUsage", "CollectionUsage"]
 tag_keys = ["name"]

https://github.com/influxdata/telegraf/blob/master/plugins/inputs/jolokia2/examples/java.conf

medium.com/@KisharaBuddika/monitoring-jvm-metrics-using-grafana-elasticsearch-telegraf-a543b0bbdb8

 

위에 metric 정보들이 무슨 의미인지 궁금하다면 아래 링크 참고

https://eyeballs.tistory.com/296

 

telegraf 가 실행중인 system 의 cpu, memory, disk 등의 metric 정보는 기본적으로 수집하므로,

따로 conf 옵션값을 설정하지 않아도 됨.

 

 

 

telegraf 에서 수집한 데이터를 influxDB 로 보내기 위해 telegraf.conf plugout 을 influxDB 에 맞게 설정해주면 된다.

예를 들면 


< telegraf.conf >

# Configuration for influxdb server to send metrics to
[[outputs.influxdb]]
  ## The full HTTP or UDP URL for your InfluxDB instance.
  ##
  ## Multiple urls can be specified as part of the same cluster,
  ## this means that only ONE of the urls will be written to each interval.
  urls = ["http://localhost:8086"]
  ## The target database for metrics (telegraf will create it if not exists).
  database = "telegrafDB"

 

위에 urls 와 database 는 반드시 들어가야 한다.

해당 url 을 통해 influxDB 에 접속하고 database table(여기선 "telegrafDB") 을 생성한 뒤

telegrafDB table 안에 telegraf 가 수집한 데이터를 저장하는 용도이다.

(influxDB 안에 미리 telegrafDB table 을 만들지 않아도 telegraf 가 알아서 table 을 만들어서 데이터 넣음)

https://blog.voidmainvoid.net/91

 

아래 이미지는, influxDB 안에 jolokia 로부터 온 jvm 데이터가 telegraf 에 의해 저장되어있는 모습을 보여줌

(내용은 중요하지 않고, 데이터를 받았다는 것에 의의를 둔다)

 

 

grafana 에서 datasource 를 influxDB 로 설정한 후에

panel 을 생성 및 query 를 작성하는 부분에서 jvm 의 데이터 table 을 볼 수 있다.

 

 

 

여러 클러스터에 telegraf 를 설치하고 하나의 influxDB 로 metric 정보를 보낼 수 있다.

 

 

위와 같이 구성했을 때, influxDB 에 어떻게 저장되고

grafana 에서 어떻게 보이는지 궁금해서

간단하게 아래 테스트를 시도해보았다.


노드1 에 telegraf, influxDB, grafana 설치
노드2 에 telegraf 설치
노드3 에 telegraf 설치

실험 코드)
for i in range(1,10000000):
    print(i)


실험 1 )
노드 1에서 코드 실행시 cpu 사용률 증가
노드 2에서 코드 실행시 cpu 사용률 똑같은 크기만큼 증가

실험 2 )
노드 1, 2 에서 동시에 코드 실행시 cpu 사용률 증가
한 노드에서만 돌렸을 때 보다 살짝 높긴 하지만
눈에 띄게 높진 않음


결과 : 노드1, 2 에서 텔레그래프로 수집한 모든 정보가 인플럭스 디비에 안전하게 저장.
(시간 동기화같은 문제가 있을 줄 알았는데... )
실험 2를 보면 노드 1, 2 의 전체 cpu 가 합쳐져서 저장되지 않고 따로 따로 저장되는 듯.
결과적으로 노드1, 2는 자신의 metric 정보를 influxdb 에 그냥 예쁘게 저장함.

 

 

 

 

 

jolokia, telegraf 연동 방법

tzara.tistory.com/79

 

jolokia-jvm-1.6.2-agent.jar 다운받는 곳

https://jolokia.org/download.html

 

telegraf + influxdb + garafana 설치 및 사용법

blog.naver.com/hanajava/221842160382

https://sketchofcreed.tistory.com/entry/Grafana-Telegraf-InfluxDB-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EC%8B%9C%EC%8A%A4%ED%85%9C

 

influxDB 설치 및 자세한 설명 : https://www.popit.kr/influxdb_telegraf_grafana_1

telegraf 설치 및 자세한 설명 : https://www.popit.kr/influxdb_telegraf_grafana_2/

grafana 설치 및 자세한 설명 :

https://www.popit.kr/influxdb_telegraf_grafana_3/

https://www.popit.kr/%ec%bd%94%eb%93%9c-%ed%95%9c%ec%a4%84-%ec%97%86%ec%9d%b4-%ec%84%9c%eb%b9%84%ec%8a%a4-dashboard-%eb%a7%8c%eb%93%a4%ea%b8%b02/

 

기타 관련 있어보이나 뭔지 모르겠는 것들

https://www.influxdata.com/blog/building-a-data-stream-for-iot-with-nifi-and-influxdb/

https://vivi-world.tistory.com/53

 

여길 보면 AmabariReportingTask 를 이용하여 Nifi 에서 곧바로 Grafana 로 metric 정보 보낼 수 있는 것 같은데

더 자세한 설명이 없고 관련된 다른 문서가 없어서 모르겠음.

https://pierrevillard.com/2017/05/16/monitoring-nifi-ambari-grafana/

 

 

 

'눈가락' 카테고리의 다른 글

영양제/비타민 구입 꿀팁 모음  (0) 2020.09.08
[JXM] Metric 정보 정리  (0) 2020.09.07
[Linux] nc 을 이용한 포트 스캔  (0) 2020.09.05
failed to bind 에러가 난 경우  (0) 2020.08.31
[Apache Ambari] 간단한 설명 링크  (0) 2020.08.27

+ Recent posts