Nightingale と Prometheus で実現するモダンな監視システム入門
ccfos/nightingaleは、モニタリング、時系列データの収集、メトリクスの管理に特化したツールです。Grafanaがデータの可視化に優れているのと同様に、Nightingaleはデータそのものを収集・管理することに焦点を当てています。つまり、Grafanaが「絵を描く画家」だとすれば、Nightingaleは「絵の具を集めて整理する人」のような役割を担います。
ソフトウェアエンジニアにとって、アプリケーションやシステムの健全性(ヘルス)を把握することは非常に重要です。システムが予期せずダウンしたり、パフォーマンスが低下したりする前に、問題を検知し対処する必要があります。Nightingaleは、この「問題の早期発見」に役立ちます。
具体的には、以下のような点で役立ちます。
システムのパフォーマンス監視
CPU使用率、メモリ使用量、ネットワークトラフィックなどのメトリクスを収集し、システムの健全性をリアルタイムで把握できます。
障害の予兆検知
収集した時系列データを分析し、通常とは異なるパターン(例
リクエスト数の急増、応答時間の遅延)を検知することで、障害が発生する前にアラートを飛ばすことができます。
サービスの信頼性向上
サービスレベル目標(SLO)やサービスレベル指標(SLI)を定義し、目標達成度をモニタリングすることで、サービスの信頼性を高めるための改善活動に繋げられます。
デバッグの効率化
障害発生時に、Nightingaleが収集した過去のメトリクスデータを参照することで、問題の根本原因を素早く特定できます。
Nightingaleを導入する主な流れは以下の通りです。
Nightingaleサーバーのセットアップ
Dockerなどを使ってNightingaleのコアサービスを起動します。
メトリクスの収集
監視したいアプリケーションやサーバーにエージェントを導入するか、Nightingaleが直接アクセスしてメトリクスを収集します。Prometheus、InfluxDB、OpenTelemetryなど、様々な形式のデータに対応しています。
アラート設定
収集したメトリクスに対して、特定の閾値を超えた場合に通知するアラートルールを設定します。SlackやPagerDutyなど、様々な通知先に連携できます。
Grafanaとの連携
収集したメトリクスをGrafanaに連携し、ダッシュボードを作成して可視化します。
ここでは、Dockerを使ってNightingaleとPrometheusを連携させ、簡単にモニタリング環境を構築する例を紹介します。
docker-compose.yml
version: '3.8'
services:
nightingale:
image: ccfos/nightingale:v2
container_name: nightingale-server
ports:
- "17000:17000"
volumes:
- ./data/nightingale:/home/n9e/data
restart: always
prometheus:
image: prom/prometheus:v2.42.0
container_name: prometheus-server
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
ports:
- "9090:9090"
volumes:
- ./config/prometheus.yml:/etc/prometheus/prometheus.yml
- ./data/prometheus:/prometheus
restart: always
config/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'nightingale'
static_configs:
- targets: ['nightingale:17000']
使い方
上記のdocker-compose.ymlとprometheus.ymlファイルを作成します。
ターミナルでdocker-compose up -dを実行します。
http://localhost:17000にアクセスするとNightingaleの管理画面が表示されます。
Nightingaleの管理画面で、Prometheusをデータソースとして登録します。
メトリクスを確認したり、アラートを設定したりすることができます。
この設定例では、Prometheusが自分自身とNightingaleのメトリクスを収集しています。Nightingaleは、Prometheusからこれらのメトリクスを受け取って管理します。このように、Nightingaleは既存のモニタリングツールと連携することで、その価値をさらに高めることができるんです。
面接官
あなたはシステムの健全性をどうやって保ちますか?
あなた
(真剣な表情で) はい、ccfos/nightingaleを使います!
面接官
なぜですか?
あなた
(コント風に) ソフトウェアエンジニアは、システムの「かかりつけ医」でなければなりません。患者(システム)のちょっとした変化も見逃さないことが重要です。Grafanaが「レントゲン写真」だとすれば、Nightingaleは患者の「日々の体温や血圧の記録」です。レントゲンを撮るだけでは、病気の予兆はわかりませんよね?日々のバイタルデータを継続的に測定・管理することで、病気の兆候をいち早く察知し、未然に防ぐことができるんです!
面接官
(笑いながら) なるほど!
あなた
(さらに続けて) そして、もし「発熱」というアラートが出たら、Slackに通知が飛ぶように設定しておけば、すぐに対応できます。夜中でもPagerDutyに電話が鳴るように設定しておけば、安心してお酒を飲めます!(少しドヤ顔で) Nightingaleは、私にとっての「システムの保険」なんです。
面接官
素晴らしいですね!面白い説明、ありがとうございました。