Prometheusの導入メモ

目次

Prometheus + Grafanaでサーバの監視をするメモの第二弾として、Prometheusを導入してサーバやスイッチの監視をしてみたメモ。

環境

  • OS: Ubuntu 20.04.2

監視対象のLinux Serverの設定(node exporter)

監視対象になるLinux Serverには、Node Exporterを導入する。

Ubuntuの場合は、sudo apt install prometheus-node-exporter でインストールできるが、バージョンは2021/2/12現在以下の通りだった。

Ubuntu 18.04のリポジトリからインストールできるバージョンは0.15.2+ds-1 (2017/12/5)
Ubuntu 20.04のリポジトリからインストールできるバージョンは0.18.1+ds-2 (2019/6/5)
公式サイトのバージョンは1.1.2 (2021/5/22)

とりあえず、Ubuntu 18.04と20.04でUbuntuのリポジトリからインストールしてみたが、取得できる内容が結構異なっており、特に18.04の場合はNode Exporter Fullで値が表示されなかった。
そのため、公式サイトのバージョンを入れることにした。

wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
tar xvf node_exporter-1.1.2.linux-amd64.tar.gz
sudo cp node_exporter-1.1.2.linux-amd64/node_exporter /usr/local/bin/prometheus-node-exporter

sudo mkdir -p /var/log/prometheus
sudo mkdir -p /var/lib/prometheus

# ubuntu
if ! getent passwd prometheus > /dev/null; then
    sudo adduser --system --home /var/lib/prometheus --no-create-home --group --gecos "Prometheus daemon" prometheus
fi

# centos
if ! getent passwd prometheus > /dev/null; then
    sudo useradd --system --home-dir /var/lib/prometheus --no-create-home --comment "Prometheus daemon" prometheus
fi

sudo chown prometheus:prometheus /var/log/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus

# 後始末
rm -rf node_exporter-1.1.2.linux-amd64
  • /lib/systemd/system/prometheus-node-exporter.service
    • 作成後、ll /lib/systemd/system/prometheus-node-exporter.serviceでroot:root 644になっていることを確認。
[Unit]
Description=Prometheus exporter for machine metrics
Documentation=https://github.com/prometheus/node_exporter

[Service]
Restart=always
User=prometheus
#EnvironmentFile=/etc/default/prometheus-node-exporter
ExecStart=/usr/local/bin/prometheus-node-exporter $ARGS
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

配置したファイルの起動と、自動起動の設定。

sudo systemctl daemon-reload
sudo systemctl enable --now prometheus-node-exporter

Prometheus(サーバ)のインストール

前回のGrafanaと同様にaptで導入しようとしてみたが、バージョンが古いようだった。

suuei@mon:~$ sudo apt policy prometheus
prometheus:
  インストールされているバージョン: (なし)
  候補:               2.15.2+ds-2
  バージョンテーブル:
     2.15.2+ds-2 500
        500 http://jp.archive.ubuntu.com/ubuntu focal/universe amd64 Packages

標準のリポジトリに入っているのは嬉しいが、2.15.2のリリース日はどうやら2020/1/6と1年以上前….
これはちょっと良くなさそうなので、別の方法を取ることにした。

公式サイトを見ても特にaptリポジトリなどの表示がないので、今回はaptではなく公式が配布している.tar.gzを展開してインストールする。
その後、自動起動とかいろいろのために、aptで配布されているdebから必要そうな部分を抜きだして実行した。

// たぶん環境を作り直すときに修正する

実行するスクリプト

aptから取れるdebを展開して抜き出したスクリプト。
ログフォルダの作成とPrometheus実行用ユーザの作成。

sudo mkdir -p /var/log/prometheus
sudo mkdir -p /var/lib/prometheus/metrics2

if ! getent passwd prometheus > /dev/null; then
  sudo adduser --system --home /var/lib/prometheus --no-create-home --group --gecos "Prometheus daemon" prometheus
fi

sudo chown prometheus:prometheus /var/log/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus

ファイルを配置する

配置するファイルは計3つ。適当なテキストエディタで作成する。

  1. /etc/default/prometheus

    • パーミッションはroot:root 644

      # Set the command-line arguments to pass to the server.
      ARGS="--config.file=\"/etc/prometheus/prometheus.yml\" --web.console.templates=\"/etc/prometheus/consoles\" --web.console.libraries=\"/etc/prometheus/console_libraries\" --storage.tsdb.path=\"/var/lib/prometheus/metrics2/\""
      
  2. /lib/systemd/system/prometheus.service

    • パーミッションはroot:root 644

      [Unit]
      Description=Monitoring system and time series database
      Documentation=https://prometheus.io/docs/introduction/overview/
      
      [Service]
      Restart=always
      User=prometheus
      EnvironmentFile=/etc/default/prometheus
      ExecStart=/usr/local/bin/prometheus $ARGS
      ExecReload=/bin/kill -HUP $MAINPID
      TimeoutStopSec=20s
      SendSIGKILL=no
      LimitNOFILE=8192
      
      [Install]
      WantedBy=multi-user.target
      
  3. /etc/logrotate.d/prometheus

    • パーミッションはroot:root 644

      /var/log/prometheus/prometheus.log {
          weekly
          rotate 10
          copytruncate
          compress
          delaycompress
          notifempty
          missingok
      }
      

本体の配置

本体のダウンロードとコピー

# 最新版のURLに変更する
wget https://github.com/prometheus/prometheus/releases/download/v2.24.1/prometheus-2.24.1.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
cd prometheus-2.24.1.linux-amd64

sudo mkdir -p /etc/prometheus
sudo chmod 755 /etc/prometheus
sudo cp -r prometheus.yml /etc/prometheus/
sudo cp -r consoles /etc/prometheus/consoles
sudo cp -r console_libraries /etc/prometheus/console_libraries

sudo cp prometheus /usr/local/bin/
sudo cp promtool /usr/local/bin/

自動起動設定と同時に起動する

sudo systemctl daemon-reload
sudo systemctl enable --now prometheus

以上でインストールは完了。

設定

/etc/prometheus/prometheus.ymlを編集し、ノードの登録を行う。
以下のように、scrape_configsの下にstatic_configsでホストのIPアドレスを記述していく。

scrape_configs:
- job_name: node
  static_configs:
  - targets:
    - '10.0.0.100:9100'
    - 'example.com:9100'

修正が終わったら、sudo service prometheus restartで適用。

(参考)aptインストール時のスクリプトの抜き出し工程

apt download prometheus
mkdir tmp
dpkg-deb -R prometheus_2.15.2+ds-2_amd64.deb tmp
cat tmp/DEBIAN/postinst