본문 바로가기
Linux

node exporter, prometheus 로 사용자 변수 수집하기

by 도경다경 2024. 12. 9.
반응형

node exporter 중에 아쉬운 게 서비스 가동여부 모니터링이 안되는 게 아쉬워서 찾아보니 변수로 값을 가져올 수가 있었다.

/etc/systemd/system/node_exporter.service 파일에 보면
ExecStart= 부분에 옵션을 추가할 수 있는데 여기에

--collector.textfile.directory=/var/lib/node_exporter/textfile_collector

라고 경로명을 추가해놓고 여기에 파일을 추가하면 grafana에서 가져온다.

해당 경로에 
service_status.prom 과 같은 파일을 만들고
별도 스크립트로 서비스 가동 상황을 text로 남기게 해놓으면 그 값으로 가동여부를 확인할 수 있다.

샘플은 다음과 같다.
1이 가동, 0이 중지 이건 조회해서 표시하기 나름이라 알아서 정하면 된다.

service_status{hostname="A", service="tomcat"} 1


서비스 정지가동여부 체크하는것도 /etc/systemd/system에 파일을 추가해 자동으로 만들자

[unit]
Description=Service Checker
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
Restart=always
ExecStart=/sysadmin/dragon/bin/service_checker.sh

[Install]
WantedBy=default.target


실제 /sysadmin/dragon/bin/service_checker.sh는 그냥 대충 만들었다.

#!/bin/bash

SERVICE_LIST="/sysadmin/dragon/conf/service_list"

CURRENT=HOSTNAME=$(hostname)

OUTPUT_FILE="var/lib/node_exporter/textfile_collector/service_status.prom"

while true; do
    > "$OUTPUT_FILE"
    grep -i "^$CURRENT_HOSTNAME:" "$SERVICE_LIST" | while IFS=: read -r host_name service_name check_command;
    do
        service_status=$(eval "$check_command")
        if [ "$service_status" -ge 1 ]; then
            echo "service_status{hostname=\"$CURRENT_HOSTNAME\", service=\"$service_name\"} 1" >> "$OUTPUT_FILE"
        else
            echo "service_status{hostname=\"$CURRENT_HOSTNAME\", service=\"$service_name\"} 0" >> "$OUTPUT_FILE"    
        fi
    done

     sleep 30
done

 

반응형

댓글