今回はモニタリングツールであるPrometheusを紹介します。
Prometheusとは
Prometheusは、
Prometheus自体は大雑把に以下の3つの部分から構成されています。
- メトリック取得対象
(Exporter) を見つけ、 取得する部分 - 取得したメトリックを蓄える時系列データベース
- 時系列データベースに蓄えたメトリックを検索するためのエンドポイント
(HTTPサーバ)
Prometheus自体はgolangで書かれているため、
Prometheusのインストール
Ubuntuでは主に以下の方法でPrometheusがインストールできます。
- aptでのインストール
- snapパッケージを利用したインストール
- Docker imageの利用
- upstreamのpre-compiledバイナリを利用した手動セットアップ
aptレポジトリとsnapパッケージにあるPrometheusはいずれもバージョンが若干古いので、
まず、
$ sudo groupadd prometheus $ sudo useradd -d /var/lib/prometheus -g prometheus -s /bin/false -m prometheus
upstreamよりバイナリをダウンロードします。実際には以下が含まれます。
- Promehteus本体のバイナリ
- 設定ファイルのサンプル
(prometheus. yml) - ユーティリティであるpromtoolのバイナリ
- エンドポイントの画面を提供するconsole template
(consoles) とそのライブラリ(console_ libraries)
$ wget https://github.com/prometheus/prometheus/releases/download/v2.8.0/prometheus-2.8.0.linux-amd64.tar.gz $ tar xf prometheus-2.8.0.linux-amd64.tar.gz $ ls -1 prometheus-2.8.0.linux-amd64 console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool
Prometheusとpromtoolのバイナリをパスが通った場所へ設置します。
$ sudo cp prometheus promtool /sbin/ $ sudo chown root:root /sbin/prometheus /sbin/promtool
設定ファイルディレクトリと時系列データベースのデータディレクトリを作成します。
$ sudo mkdir /etc/prometheus $ sudo mkdir /var/lib/prometheus/data $ sudo chown -R prometheus:prometheus /var/lib/prometheus/data
サンプルの設定ファイルと、
$ sudo cp -r prometheus.yml consoles console_libraries /etc/prometheus/ $ sudo chown -R root:prometheus /etc/prometheus
最後に/etc/
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target
[Service]
User=prometheus
ExecStart=/sbin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/data --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries
ExecStop=/bin/kill -TERM ${MAINPID}
ExecReload=/bin/kill -HUP ${MAINPID}
[Install]
WantedBy=multi-user.target
更新したunit fileを読み込み、
$ systemctl daemon-reload $ systemctl start prometheus.service $ systemctl status prometheus.service
ブラウザでPrometheusが起動しているホストの9090番ポートへアクセスしてみましょう。
すると図1のようなダッシュボードが表示されるはずです。ダッシュボードからは後述のPromQLをクエリしたり、
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0562/thumb/TH800_01.jpg)
また、
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0562/thumb/TH800_02.jpg)
Node_Exporterのインストール
次にメトリック収集対象としてExporterをインストールします。
Exporterの実体はPrometheusから
Exporterは公式・
Node_
先程Prometheusをインストールしたホストでupstreamよりバイナリをダウンロードし、
$ wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz $ tar xf node_exporter-0.17.0.linux-amd64.tar.gz $ sudo cp node_exporter-0.17.0.linux-amd64/node_exporter /sbin/ $ sudo chown root:root /sbin/node_exporter
/etc/
[Unit]
Description=Node Exporter for Prometheus
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/sbin/node_exporter
PrivateTmp=true
[Install]
WantedBy=multi-user.target
そして以下の手順でNode_
$ systemctl daemon-reload $ systemctl start node_exporter.service
起動できたらブラウザでNode_
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0562/thumb/TH800_03.jpg)
また、
$ curl localhost:9100/metrics # HELP go_gc_duration_seconds A summary of the GC invocation durations. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 0 go_gc_duration_seconds{quantile="0.25"} 0 go_gc_duration_seconds{quantile="0.5"} 0 go_gc_duration_seconds{quantile="0.75"} 0 go_gc_duration_seconds{quantile="1"} 0 go_gc_duration_seconds_sum 0 go_gc_duration_seconds_count 0 # HELP go_goroutines Number of goroutines that currently exist. # TYPE go_goroutines gauge go_goroutines 6 # HELP go_info Information about the Go environment. # TYPE go_info gauge go_info{version="go1.11.2"} 1 (略)
Prometheusの設定ファイルとNode_Exporterの登録
PrometheusがExporterからメトリックを取得して、
そのため、
その前に、
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
Exporterからメトリックを取得する部分にのみ着目すると、
- globalのscrape_
intervalでExporterから15秒周期でメトリックを取得 - scrape_
configsに'prometheus'としてPrometheus自分自身のメトリックを取得するjobを定義
PrometheusでExporterからメトリックを取得する際にはExporter
それでは、
scrape_configs:
(略)
- job_name: 'node'
file_sd_configs:
- files:
- /etc/prometheus/nodes.yml
メトリック取得対象の定義にはサービスディスカバリ機能を用います。今回はfile_
なお、
file_
- targets:
- localhost:9100
labels:
role: prometheus
設定を追加したら、
$ promtool check config /etc/prometheus/prometheus.yml Checking /etc/prometheus/prometheus.yml SUCCESS: 0 rule files found
問題がなければPrometheusをreloadして、
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0562/thumb/TH800_04.jpg)
PromQLを使用したグラフの描画
Prometheusでは時系列データベースに対してPromQL という独自のクエリ言語を使用してグラフの描画やデータの加工、
PromQLの簡単な例をいくつか紹介します。
PromQLの発行クライアントとして、
一番上のテキストボックスに以下を入力してエンターキーを押下すると、
node_load1{instance="localhost:9100"}
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0562/thumb/TH800_05.jpg)
また、
irate(node_cpu_seconds_total{instance="localhost:9100", mode!="idle"}[1m]) * 100
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0562/thumb/TH800_06.jpg)
上記のクエリでは、
Grafanaのインストールとダッシュボードの作成
先に紹介したPrometheusのダッシュボードはグラフを可視化するものですが、
Prometheusの可視化ツールとしてのデファクトスタンダードはGrafanaです。PrometheusのダッシュボードとGrafanaでは基本的には以下の使い分けをします。
- 何か確認したいことや、
異常があった時の調査では、 PrometheusダッシュボードからPromQLをクエリして確認する - 日常的によく見るものに関してはGrafanaダッシュボードにグラフを作成しておく
Grafanaは公式のインストールドキュメントに従ってインストールし、
$ sudo /bin/bash -c "echo deb https://packages.grafana.com/oss/deb stable main > /etc/apt/sources.list.d/grafana.list" $ curl https://packages.grafana.com/gpg.key | sudo apt-key add - $ sudo apt update $ sudo apt install grafana $ sudo systemctl start grafana-server.service
Grafanaの起動後、
ログイン後データソースとしてPrometheusを追加します。
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0562/thumb/TH800_07.jpg)
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0562/thumb/TH800_08.jpg)
Prometheusの設定画面に入りますので、
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0562/thumb/TH800_09.jpg)
データソースを追加すれば後はダッシュボードにPromQLを入力して任意のグラフなどを表示できます
![画像](/assets/images/admin/serial/01/ubuntu-recipe/0562/thumb/TH800_10.jpg)
また、