node exporter, prometheus 로 사용자 변수 수집하기
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