systemd 서비스 상태 체크 코드

본문 바로가기
사이트 내 전체검색

로그인
회원가입
잡담게시판

systemd 서비스 상태 체크 코드
2

View 346  | 작성일2024.11.11 17:24

본문

gpt 에게 systemd 서비스 상태 체크하는 코드를 작성하게 시켜봤습니다.


- 파이썬 코드

import sys, asyncio
from prometheus_client import Gauge, start_http_server
import subprocess


# Prometheus Gauge 정의
service_status = Gauge('systemd_service_status', 'Status of a systemd service', ['service'])

async def get_service_status(service_name):
  """특정 서비스의 상태를 확인하여 1 (활성) 또는 0 (비활성) 반환."""
  try:
    output = await asyncio.create_subprocess_exec(
      'systemctl', 'is-active', service_name,
      stdout=subprocess.PIPE,
      stderr=subprocess.PIPE
    )
    stdout, _ = await output.communicate()
    return 1 if stdout.decode().strip() == "active" else 0
  except subprocess.CalledProcessError:
    return 0  # 서비스가 비활성화되어 있는 경우


async def monitor_service(service_name, interval):
  """지정된 서비스 상태를 주기적으로 확인하고 메트릭 업데이트."""
  while True:
    status = await get_service_status(service_name)
    service_status.labels(service=service_name).set(status)
    await asyncio.sleep(interval)


async def main(service_name, service_port, interval=60):
  # Prometheus 서버 시작
  start_http_server(service_port, addr="0.0.0.0")
  print(f"Prometheus metrics available at http://0.0.0.0:{service_port}/metrics")

  # 서비스 상태 모니터링 시작
  await monitor_service(service_name, interval)



if __name__ == '__main__':
  if len(sys.argv) < 3:
    print("Usage: python   ")
    sys.exit(1)

  service_name = sys.argv[1]
  service_port = int(sys.argv[2])

  asyncio.run(main(service_name, service_port))


- grafana 에서 promql 은 다음과 같이 하면..

systemd_service_status{service="nginx", instance="192.168.100.160:9200"} == 1


ca45edb09765e403699f4105ec699f96_1731313427_0797.png
 

제법 잘 동작합니다.



댓글목록

잡담게시판 목록

게시물 검색

접속자집계

오늘
2,050
어제
1,963
최대
6,399
전체
977,826
Copyright © LittleCandle All rights reserved.
문의메일 : littlecandle99@gmail.com
모바일 버전으로 보기