3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PrometheusとGrafanaで監視環境を作ったら自分のアホさに今更気づいた話

Last updated at Posted at 2024-12-30

はじめまして!
普段は自分のためだけに地震系のアプリやらなんやらを作っている変な人です。

背景

最近、ふと「システムちゃんと動いてるか監視したいなぁ(唐突)」と思い立ち、PrometheusとGrafanaを使って監視環境を作ることに挑戦してみました。
ですが、これが意外と大変でした…。今回はその奮闘記を少し共有しつつ、これから挑戦する人に少しでも参考になれば嬉しいです!
(誤字脱字や知識不足なところがあれば、やんわり教えていただけると助かります…!)

使ったツールや環境

  • OS: Ubuntu 24.04

  • VPN: Tailscale(プライベートで構築したかったため)

  • 監視ツール:

    • Prometheus(データ収集・監視)
    • Grafana(データの可視化)
    • Node Exporter(CPU、メモリ、ディスク情報の収集)
  • 監視したいサーバー達:

    • 実機 3台
    • クラウド 2台

構築の流れ

Tailscaleのセットアップ

別にやらなくてもいいけど、圧倒的に便利なので、Tailscaleでプライベートネットワークを構築する。
(外出先からsshを楽にしたいなどの理由で元から構築済み)

全てのサーバーにTailscaleをインストール & 起動

よほどのことがない限り多分コマンドは変わらない…はず…

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

Prometheusのセットアップ

各サーバーのデータを収集などをする中心となるツールのセットアップをする。

Prometheusをインストール

# 1) 最新のバージョンを取得してダウンロード
VERSION=$(curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | grep '"tag_name"' | sed -E 's/.*"v([^"]+)".*/\1/')
wget https://github.com/prometheus/prometheus/releases/download/v${VERSION}/prometheus-${VERSION}.linux-amd64.tar.gz

# 2) 解凍してバイナリ類を移動
tar -xvzf prometheus-${VERSION}.linux-amd64.tar.gz

# prometheus, promtool を /usr/local/bin/ に移動(バイナリはここにまとめる)
sudo mv prometheus-${VERSION}.linux-amd64/prometheus /usr/local/bin/
sudo mv prometheus-${VERSION}.linux-amd64/promtool /usr/local/bin/

# コンソール用のフォルダは /usr/local/prometheus/ に移動してあげる
sudo mkdir -p /usr/local/prometheus
sudo mv prometheus-${VERSION}.linux-amd64/consoles /usr/local/prometheus
sudo mv prometheus-${VERSION}.linux-amd64/console_libraries /usr/local/prometheus

# データディレクトリを作っておく
sudo mkdir -p /usr/local/prometheus/data

# 使い終わったら不要なフォルダ消す
rm -rf prometheus-${VERSION}.linux-amd64*

prometheus.serviceの作成

sudo nano /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring
Wants=network-online.target
After=network-online.target

[Service]
User=ubuntu
ExecStart=/usr/local/bin/prometheus \
  --config.file=/usr/local/prometheus/prometheus.yml \
  --storage.tsdb.path=/usr/local/prometheus/data \
  --web.listen-address=0.0.0.0:9090
Restart=always

[Install]
WantedBy=multi-user.target

こんな感じに記入する

Prometheusの設定ファイルを編集

sudo tailscale status

を実行してサーバーのアドレスを調べる。

000.000.000.000   statusserver        user linux   -
000.000.000.000   server1             user linux   active; direct 0.0.0.0:00000, tx 00000000 rx 000000000
000.000.000.000   server2             user linux   active; direct 0.0.0.0:00000, tx 00000000 rx 000000000

今回はserver1server2を監視する

Prometheusの設定ファイルを開く

sudo nano /usr/local/prometheus/prometheus.yml
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090", "server1:9100", "000.000.000.000:9100"]

targetsTailscaleの各サーバーアドレスを入れる。(PC名でも行けるのでそっちの方をおすすめします!)ポートは9100でOK!

Prometheusを起動

sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus

<サーバーのIP>:9090にアクセスし、Prometheusが動作しているか確認。
(クライアントにもTailscaleを入れていると、今回の場合はstatusserver:9090でもアクセスできるのでおすすめです!)

Grafanaのセットアップ

1. Grafanaのインストール

今回は安定版リリースとOSS版を使用

sudo apt-get install -y apt-transport-https software-properties-common wget
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana

2. Grafanaの起動と初期設定

sudo systemctl enable grafana-server
sudo systemctl start grafana-server

<サーバーIP>:3000にアクセスするとこんな感じ。

image.png

ユーザー名とパスワードを求められるので

  • ユーザー名: admin
  • パスワード: admin(初回ログイン後に変更を求められます)

Prometheusをデータソースとして追加

image.png
サイドバーからConnectionsData sourcesにあるAdd new data sourceで新規追加する

image.png
Prometheusを選択

image.png
Connection項目のURLをhttp://localhost:9090
Save & testで追加完了

一旦Grafanaの初期設定は終了


各サーバーにNodeExporterのインストール

監視対象サーバーにてインストールをする

# 1) 最新のバージョンを取得してダウンロード
VERSION=$(curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest | grep '"tag_name"' | sed -E 's/.*"v([^"]+)".*/\1/')
wget https://github.com/prometheus/node_exporter/releases/download/v${VERSION}/node_exporter-${VERSION}.linux-amd64.tar.gz

# 2) 解凍してバイナリを /usr/local/bin/ に移動
tar -xvzf node_exporter-${VERSION}.linux-amd64.tar.gz
sudo mv node_exporter-${VERSION}.linux-amd64/node_exporter /usr/local/bin/

# 3) 後始末
rm -rf node_exporter-${VERSION}.linux-amd64*

node_exporter.serviceを作成

sudo nano /etc/systemd/system/node_exporter.service
[Unit]
Description=Prometheus Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
Restart=always

[Install]
WantedBy=multi-user.target

こんな感じに記入する(本日2回目)

そしてNode Exporterを起動する!

sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter

Grafanaにてダッシュボードの作成

もちろん最初からダッシュボードを作るなんて面倒なんでやりません!(なまけものですすんません)
どっかの神様が作成した完成品をパクりお借りしましょう!

やり方は超簡単!

サイドバーからDashboardsを選択しNewからImportを選択
image.png

今回は動作確認済みの1860(Node Exporter Full)をインポートする。
image.png

先ほど追加したデータソースを選択しインポートする
image.png

こうなれば成功!
image.png

お疲れ様でした!

私がやってつまずいた場所

Node Exporterのエラー(status=217/USER

問題

PrometheusのStatusTargetsを確認したら、エンドポイントがdownになっていました。
sudo systemctl status node_exporterで確認するとNode Exporterが正しく起動していないことが判明。

どうやらNode Exporterが専用ユーザーで起動できず失敗したようなのでnode_exporterユーザーを作成して実行ファイルの権限を設定してあげる。

sudo useradd -r -s /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
sudo systemctl daemon-reload
sudo systemctl restart node_exporter

sudo systemctl status node_exporterでrunningが確認できれば成功!
この手順で私は問題を解決しました!

私のアホすぎるエピソード

実はですね...最初は「Node Exporterを外部公開しても大丈夫でしょ!」って謎の自信で、Nginxを使ってリバースプロキシでポートを外部に向けようとしてたんですよ。

今考えれば、セキュリティ的にアウトオブアウトだし、効率的にも最悪。「何してんねん!?」って感じです。

作業してる途中で「あれ!?これTailscale使えば秒で解決じゃん!えぇー!バカじゃーん!」って気づいた瞬間の虚無感、今でも忘れられません…。

監視環境を作ってセキュリティ的にもなんか少し学べた気がしますし圧倒的にやってよかったと思っています!
(これから気をつけます........)

まとめ

構築するのは割と引っかかったりして大変でしたけど、完成したシステムには大満足しています!何と言ってもカックイーんですねこれが!ついでにサーバーも監視できて更に安心感が増しました!

最後に、初めての投稿で色々と教えてくださった@Bacalhauさんに感謝します!サポートありがとうございました!

3
7
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?