Tokomon - Digimon
티쿠스 IT 블로그

Grafana

[Grafana] 서버 구성 (3) - Prometheus Exporter 구성 (오픈소스 제품)

티쿠스 2023. 1. 26. 09:26

<Table of Contents>

Ⅰ. OVERVIEW

Ⅱ. Prometheus 설치 

1. Prometheus
2. Prometheus 설치 
3. Node Exporter 설치
4. Prometheus 및 Node Exporter 연동

Ⅲ. Grafana 설치

1. Grafana
2. Grafana 설치

3. Grafana 서버 구성

Ⅳ. Exporter 설치

1. DB - MySQL Exporter 구성
2. WAS - Tomcat JMX Exporter 구성
3. WEB - Apache Exporter 구성
4. DB - Oracle DB Exporter 구성
5. WAS - WebLogic Monitoring Exporter 구성
6. WEB - Apache Exporter 구성 (OHS)

Ⅴ. Grafana Plugin 설치

1. Grafana Loki
2. Grafana Loki 설치
3. Promtail 설치
4. Grafana 서버 구성

 

목차 중, Prometheus Exporter 구성에 관한 파트입니다.

그리고 그 중 오픈소스인 Apache HTTP Server, Tomcat, MySQL를 Prometheus와 연동해봅니다.

 

Product Version IP Address
3-Tier 아키텍쳐
(오픈소스)
Apache HTTP Server 2.4.43 192.168.56.113
Tomcat 9.0.71
MySQL 8.0.31
Exporter Apache Exporter 0.11.0
JMX Exporter 0.17.2
MySQLD Exporter 0.14.0

 

 

Ⅳ. Exporter 설치

1. DB - MySQL Exporter 구성 (192.168.56.113)

1) 기본환경 구성

# 사용자 계정 설정
cmd>
su - grafana
c
md> mysql -u root -p
<password>

mysql> CREATE USER 'grafana'@'localhost' IDENTIFIED BY '<PASSWORD>' WITH MAX_USER_CONNECTIONS 3;
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'grafana'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

# 서드파티 프로그램의 연결 설정
cmd> vi /etc/my.cnf
[client]
socket=/var/lib/mysql/mysql.sock
user=grafana
password=<PASSWORD>

 

2) MySQL Exporter 구성성

■ Grafana 다운로드 링크

https://prometheus.io/download/#mysqld_exporter
  버전 0.14.0로 설치할 것입니다.

cmd> wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
cmd> tar -xvf mysqld_exporter-0.14.0.linux-amd64.tar.gz -C /monitoring/prometheus/

cmd> cd
 /monitoring/prometheus/mysqld_exporter-0.14.0.linux-amd64
cmd>
vi startMySQLExporter.sh
./mysqld_exporter --config.my-cnf=/etc/my.cnf &

cmd>
vi stopMySQLExporter.sh
ps -ef | grep mysqld_exporter | awk {'print "kill -9 " $2'} | sh -x

cmd> 
chmod 750 *.sh

 

3) MySQL Exporter 실행

cmd> ./startMySQLExporter.sh

MySQL 익스포터 기동 쉘스크립트 실행

 

실행 확인 후 로컬 브라우저를 통해 http://192.168.56.113:9104 에 접속 성공 확인

 

MySQL Exporter 서비스 접속 확인

 

4) [옵션] MySQL Exporter 시스템 데몬 등록 

cmd> sudo vi /etc/systemd/system/mysql_exporter.service
[Unit]
Description=Prometheus MySQL Exporter
After=network.target
User=grafana
Group=grafana

[Service]
Type=simple
Restart=always
ExecStart=/monitoring/prometheus/mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter \
--config.my-cnf=/etc/my.cnf \
--web.listen-address=0.0.0.0:9104 \
--collect.engine_tokudb_status \
--collect.global_status \
--collect.global_variables \
--collect.info_schema.clientstats \
--collect.info_schema.innodb_metrics \
--collect.info_schema.innodb_tablespaces \
--collect.info_schema.innodb_cmp \
--collect.info_schema.innodb_cmpmem \
--collect.info_schema.processlist \
--collect.info_schema.processlist.min_time=0 \
--collect.info_schema.query_response_time \
--collect.info_schema.replica_host \
--collect.info_schema.tables \
--collect.info_schema.tables.databases=‘*’ \
--collect.info_schema.tablestats \
--collect.info_schema.schemastats \
--collect.info_schema.userstats \
--collect.mysql.user \
--collect.perf_schema.eventsstatements \
--collect.perf_schema.eventsstatements.digest_text_limit=120 \
--collect.perf_schema.eventsstatements.limit=250 \
--collect.perf_schema.eventsstatements.timelimit=86400 \
--collect.perf_schema.eventsstatementssum \
--collect.perf_schema.eventswaits \
--collect.perf_schema.file_events \
--collect.perf_schema.file_instances \
--collect.perf_schema.file_instances.remove_prefix=false \
--collect.perf_schema.indexiowaits \
--collect.perf_schema.memory_events \
--collect.perf_schema.memory_events.remove_prefix=false \
--collect.perf_schema.tableiowaits \
--collect.perf_schema.tablelocks \
--collect.perf_schema.replication_group_members \
--collect.perf_schema.replication_group_member_stats \
--collect.perf_schema.replication_applier_status_by_worker \
--collect.slave_status \
--collect.slave_hosts \
--collect.heartbeat \
--collect.heartbeat.database=true \
--collect.heartbeat.table=true \
--collect.heartbeat.utc

[Install]
WantedBy=multi-user.target

cmd> sudo systemctl daemon-reload
cmd> sudo systemctl enable mysql_exporter --now

cmd> ./stopMySQLExporter.sh
cmd> sudo systemctl restart mysql_exporter

cmd> curl -X GET http://192.168.56.113:9104
<html>
<head><title>MySQLd exporter</title></head>
<body>
<h1>MySQLd exporter</h1>
<p><a href='/metrics'>Metrics</a></p>
</body>
</html>

 

5) Prometheus & MySQL Exporter 연동 (192.168.56.112)

cmd> su - grafana
cmd> cd
/monitoring/prometheus/prometheus-2.40.1.linux-amd64
cmd> 
vi conf/prometheus.yml
...
  - job_name: "prometheus-mysql"
    static_configs:
      - targets: ["146.56.161.62:9104"]
        labels:
          app: mysql

cmd>
./stopPrometheus.sh 
cmd> ./startPrometheus.sh

# 데몬 형태로 띄웠다면 
cmd> sudo systemctl restart prometheus

 

프로메테우스 실행 확인 후 로컬 브라우저를 통해 http://192.168.56.112:9090/targets 에 mysql job이 up된 것을 확인합니다.

 

Targets 확인

 

6) MySQL 대시보드 구성

 

MySQL Exporter가 수집한 메트릭을 모니터링하는 대시보드(ID : 7362)를 생성해줄 것입니다.

대시보드 링크 - MySQL Overview | Grafana Labs

 

대시보드 생성을 위해 로컬 브라우저를 통해 http://192.168.56.111:3000 에 접속합니다.

 

새로운 대시보드 Import

 

대시보드 ID 입력

 

 

대시보드에 연결할 데이터소스를 프로메테우스로 선택

 

해당 대시보드에서 MySQL 관련 메트릭을 상세 확인할 것입니다. ex) MySQL 커넥션, 테이블락, 임시오브젝트, 쿼리캐시 등

 

생성한 대시보드 확인

 

192.168.56.113 노드의 MySQL 관련 메트릭 확인

 

 

 

2. WAS - Tomcat JMX Exporter 구성 (192.168.56.113)

1) JMX Exporter 구성

■ JMX Exporter GitHub 링크

https://github.com/prometheus/jmx_exporter
  jar 형태의 버전 0.17.2 로 설치할 것입니다.

cmd> cd /monitoring/install
cmd> 
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar

cmd>
 tar -xvf jmx_prometheus_javaagent-0.17.2.jar
cmd> mkdir /monitoring/prometheus/jmx_exporter-0.17.2 && cd $_

# jar 파일을 현 위치(.)로 옮겨오기
cmd> 
mv /monitoring/install/jmx_prometheus_javaagent-0.17.2.jar  .

# export 설정파일 작성
cmd>
 cd /monitoring/prometheus/jmx_exporter-0.17.2
cmd>
vi config.yml
---
lowercaseOutputName: true
lowercaseOutputLabelNames: true

rules:
- pattern: 'java.lang<type=OperatingSystem><>(FreePhysicalMemorySize|TotalPhysicalMemorySize|FreeSwapSpaceSize|TotalSwapSpaceSize|SystemCpuLoad|ProcessCpuLoad|OpenFileDescriptorCount|AvailableProcessors)'
  name: java_lang_OperatingSystem_$1
  type: GAUGE

- pattern: 'java.lang<type=Threading><>(TotalStartedThreadCount|ThreadCount)'
  name: java_lang_threading_$1
  type: GAUGE

- pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+)'
  name: catalina_globalrequestprocessor_$3_total
  labels:
    port: "$2"
    protocol: "$1"
  help: Catalina global $3
  type: COUNTER

- pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount)'
  name: catalina_servlet_$3_total
  labels:
    module: "$1"
    servlet: "$2"
  help: Catalina servlet $3 total
  type: COUNTER

- pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount)'
  name: catalina_threadpool_$3
  labels:
    port: "$2"
    protocol: "$1"
  help: Catalina threadpool $3
  type: GAUGE

- pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions)'
  name: catalina_session_$3_total
  labels:
    context: "$2"
    host: "$1"
  help: Catalina session $3 total
  type: COUNTER

- pattern: ".*"

 

여기까지 했으면, jmx exporter 디렉터리에 config.yml과 jar 파일 하나만 있을 것입니다.

 

WAS에 구성하는 Exporter는 다른 Exporter들과는 다르게,

따로 실행 파일을 돌려서 프로세스를 띄우는 방식으로 사용하지 않습니다.

 

WAS 인스턴스 기동 스크립트에 OPTS 형태로 추가해주거나, (JMX Exporter의 케이스)

혹은 WAR 형태로 Application을 배포해주면 됩니다. (WebLogic Monitoring Exporter의 케이스)

 

cmd> cd ${TOMCAT_HOME}
cmd>
vi bin/catalina.sh
...
JMX_EX_HOME=/monitoring/prometheus/jmx_exporter_0.17.2

CATALINA_OPTS="$CATALINA_OPTS -javaagent:${JMX_EX_HOME}/jmx_prometheus_javaagent-0.17.2.jar=8181:${JMX_EX_HOME}/config.yml"
...

 

2) Tomcat 인스턴스 실행

cmd> ./bin/shutdown
cmd>
./bin/startup

Tomcat 기동 쉘스크립트 실행

 

실행 확인 후 로컬 브라우저를 통해 http://192.168.56.113:8181 에 접속 성공 확인

 

JMX Exporter 서비스 접속 확인

 

3) Prometheus & JMX Exporter 연동 (192.168.56.112)

cmd> su - grafana
cmd> cd
 /monitoring/prometheus/prometheus-2.40.1.linux-amd64
cmd> 
vi conf/prometheus.yml
...
  - job_name: "prometheus-tomcat-jmx"
    static_configs:
      - targets: ["192.168.56.113:8181"]
        labels:
          app: tomcat

cmd>
 ./stopPrometheus.sh
cmd> ./startPrometheus.sh

# 데몬 형태로 띄웠다면 
cmd> sudo systemctl restart prometheus

 

프로메테우스 실행 확인 후 로컬 브라우저를 통해 http://192.168.56.112:9090/targets 에 tomcat-jmx job이 up된 것을 확인합니다.

 

Targets 확인

 

4) Tomcat JVM 대시보드 구성

 

JMX Exporter가 수집한 JVM 관련 메트릭을 모니터링하는 대시보드(ID : 3457)를 생성해줄 것입니다.

대시보드 링크 - JMX Overview | Grafana Labs

 

대시보드 생성을 위해 로컬 브라우저를 통해 http://192.168.56.111:3000 에 접속합니다.

 

새로운 대시보드 Import

 

대시보드 ID 입력

 

대시보드에 연결할 데이터소스를 프로메테우스로 선택

 

해당 대시보드에서 JVM 관련 메트릭을 상세 확인할 것입니다. ex) Tomcat 성능정보, 메모리 힙/논힙, 스레드, GC 등

 

생성한 대시보드 확인

 

192.168.56.113 노드의 JVM 관련 메트릭 확인

 

3. WEB - Apache Exporter 구성 (192.168.56.113)

1) Apache Exporter 구성

■ Apache Exporter GitHub 링크

https://github.com/Lusitaniae/apache_exporter
  버전 v0.11.0 로 설치할 것입니다.

cmd> cd /monitoring/install
cmd> 
wget https://github.com/Lusitaniae/apache_exporter/releases/download/v0.11.0/apache_exporter-0.11.0.linux-amd64.tar.gz
cmd>
tar -xvf apache_exporter-0.11.0.linux-amd64.tar.gz -C /monitoring/prometheus
cmd>
cd /monitoring/prometheus/apache_exporter-0.11.0.linux-amd64


cmd> vi startApacheExporter.sh
./apache_exporter &

cmd> 
vi stopApacheExporter.sh
ps -ef | grep apache_exporter | awk {'print "kill -9 " $2'} | sh -x

cmd> 
chmod 750 *.sh

 

2) Apache Exporter 실행

cmd> ./startApacheExporter.sh

Apache Exporter 실행 확인

 

실행 확인 후 로컬 브라우저를 통해 http://192.168.56.113:9117 에 접속 성공 확인

 

Apache Exporter 서비스 접속 확인

 

3) [옵션] Apache Exporter 시스템 데몬 등록 

cmd> sudo vi /etc/systemd/system/apache_exporter.service
[Unit]
Description=Prometheus
Documentation=https://github.com/Lusitaniae/apache_exporter
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=grafana
Group=grafana
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/monitoring/prometheus/apache_exporter-0.11.0.linux-amd64/apache_exporter \
  --insecure \
  --scrape_uri=http://192.168.56.113:<APACHE_PORT>/server-status/?auto \
  --telemetry.address=192.168.56.113:9117 \
  --telemetry.endpoint=/metrics

SyslogIdentifier=apache_exporter
Restart=always

[Install]
WantedBy=multi-user.target


cmd> sudo systemctl daemon-reload
cmd> sudo systemctl enable apache_exporter --now

cmd> ./stopApacheExporter.sh
cmd> sudo systemctl restart apache_exporter

cmd> curl -X GET http://192.168.56.113:9117
<html>
                         <head><title>Apache Exporter</title></head>
                         <body>
                         <h1>Apache Exporter</h1>
                         <p><a href='/metrics'>Metrics</a></p>
                         </body>
                         </html>

 

4) server-status 핸들러 활성화

cmd> cd ${HTTPD_HOME}
cmd>
sudo vi conf/httpd.conf

<Location /server-status>
        SetHandler server-status
</Location>

cmd>
./bin/apachectl stop 
cmd>
./bin/apachectl -k start

# 데몬 형태로 띄웠다면 
cmd>
sudo systemctl restart httpd

 

이 핸들러를 활성화시켜줘야 Exporter를 통한 메트릭 수집이 가능해집니다.

 

아파치 실행 확인 후 로컬 브라우저를 통해 http://192.168.56.113:<APACHE_PORT>/server-status?auto 에 apache의 server-status 관련 메트릭 목록이 나오는지 확인합니다.

 

메트릭 확인

 

5) Prometheus & Apache Exporter 연동 (192.168.56.112)

cmd> su - grafana
cmd> cd
 /monitoring/prometheus/prometheus-2.40.1.linux-amd64
cmd> 
vi conf/prometheus.yml
...
  - job_name: "prometheus-apache"
    static_configs:
      - targets: ["192.168.56.113:9117"]
        labels:
          app: apache

cmd>
 ./stopPrometheus.sh
cmd> ./startPrometheus.sh

# 데몬 형태로 띄웠다면 
cmd> sudo systemctl restart prometheus

 

프로메테우스 실행 확인 후 로컬 브라우저를 통해 http://192.168.56.112:9090/targets 에 apache job이 up된 것을 확인합니다.

 

Targets 확인

 

6) Apache 대시보드 구성

Apache Exporter가 수집한 메트릭을 모니터링하는 대시보드(ID : 3894)를 생성해줄 것입니다.

대시보드 링크 - Apache | Grafana Labs

 

대시보드 생성을 위해 로컬 브라우저를 통해 http://192.168.56.111:3000 에 접속합니다.

 

새로운 대시보드 Import

 

대시보드 ID 입력

 

대시보드에 연결할 데이터소스를 프로메테우스로 선택

 

해당 대시보드에서 Apache 관련 메트릭을 상세 확인할 것입니다. ex) Apache 가동시간, 총 송신/접근 현황, 스코어보드, worker 상태 등

 

생성한 대시보드 확인

 

192.168.56.113 노드의 Apache 관련 메트릭 확인

 

다음 글 참고

[Grafana] 서버 구성 (4) - Prometheus Exporter 구성 (오라클 제품) (tistory.com)

 

[Grafana] 서버 구성 (4) - Prometheus Exporter 구성 (오라클 제품)

Ⅰ. OVERVIEW Ⅱ. Prometheus 설치 1. Prometheus 2. Prometheus 설치 3. Node Exporter 설치 4. Prometheus 및 Node Exporter 연동 Ⅲ. Grafana 설치 1. Grafana 2. Grafana 설치 3. Grafana 서버 구성 Ⅳ. Exporter 설치 1. DB - MySQL Exporter 구

tikus.tistory.com