VirtualBox 6
ゲストOS: CentOS Linux release 7.5.1804 (Core)
仮想マシンの [設定] -> [ネットワーク設定]
割り当て: NAT
[高度] -> [ポートフォワーディング]
SSH: TCP 1022 -> 22
Promethus GUI: TCP 19090 -> 9090
Grafana GUI: TCP 13000 -> 3000
モジュールバージョンとパッケージ
Prometheus: 2.14.0
パッケージ: prometheus-2.14.0.linux-amd64.tar.gz
Node exporter: 0.18.1
パッケージ: node_exporter-0.18.1.linux-amd64.tar.gz
Grafana: 6.4.4
パッケージ: grafana-6.4.4-1.x86_64.rpm
CentOSセットアップ
firewalldでhttp httpsを許可
$ systemctl status firewalld # active (runnig)
$ sudo firewall-cmd --list-all
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
# ポート許可
$ sudo firewall-cmd --permanent --add-port=22/tcp
$ sudo firewall-cmd --permanent --add-port=9090/tcp
$ sudo firewall-cmd --permanent --add-port=9100/tcp
$ sudo firewall-cmd --permanent --add-port=3000/tcp
$ sudo firewall-cmd --list-ports
$ sudo firewall-cmd --reload
$ sudo systemctl stop firewalld # 以下検証環境
$ sudo systemctl is-enabled firewalld # enabledになっていたら下記を実施
$ sudo systemctl disable firewalld
$ sudo systemctl is-enabled firewalld
Prometheusインストール
インストール作業
公式サイト
Owner等は全てroot
$ cd /tmp
$ curl -LO https://github.com/prometheus/prometheus/releases/download/v2.14.0/prometheus-2.14.0.linux-amd64.tar.gz
$ tar xvzf prometheus-2.14.0.linux-amd64.tar.gz
$ sudo cp -r prometheus-2.14.0.linux-amd64 /etc/prometheus
Prometheus の起動スクリプト設定、ログローテート設定 参考
$ sudo /etc/init.d/prometheus start
$ sudo /etc/init.d/prometheus status
$ sudo /etc/init.d/prometheus stop
Prometheusへのアクセス確認
PromQLの実行確認
Expressionと表示されているの枠にクエリを入力してExecuteをクリックして実行。
上がっているサーバを確認
Expression: up
Element: up{instance="localhost:9090",job="prometheus"}
Value: 1
使用中メモリを確認
(基本単位はバイト、秒、など)
Expression: process_resident_memory_bytes
Element: process_resident_memory_bytes{instance="localhost:9090",job="prometheus"}
Value: 49057792
Exporter
使用されているポート一覧:port allocations
Node exporterインストール
$ cd /tmp
$ curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
$ tar xvzf node_exporter-0.18.1.linux-amd64.tar.gz
$ sudo cp -r node_exporter-0.18.1.linux-amd64 /etc/node_exporter
Node exporterの起動スクリプト設定、ログローテート設定 参考
$ sudo vim /etc/rc.d/init.d/node_exporter # 起動スクリプト作成
$ sudo chmod +x /etc/rc.d/init.d/node_exporter
$ sudo mkdir /var/log/node_exporter
$ sudo /etc/init.d/node_exporter start # 起動スクリプトにてスタート
$ sudo /etc/init.d/node_exporter status
$ sudo chkconfig node_exporter on
$ sudo vim /etc/logrotate.d/node_exporter # ログローテート設定作成
$ sudo vim /etc/prometheus/prometheus.yml # Prometheus 設定ファイルに追記
$ sudo /etc/prometheus/promtool check config /etc/prometheus/prometheus.yml
Checking /etc/prometheus/prometheus.yml
SUCCESS: 0 rule files found
$ sudo /etc/init.d/prometheus reload
Prometheusのコンソールから下記を実行&確認
Expression: node_memory_Cached_bytes
Element: node_memory_Cached_bytes{instance="localhost:9100",job="node"}
Value: 996540416
Grafana インストール & Prometheus と連携
$ wget https://dl.grafana.com/oss/release/grafana-6.4.4-1.x86_64.rpm
$ sudo yum install initscripts urw-fonts
$ sudo rpm -Uvh grafana-6.4.4-1.x86_64.rpm
$ sudo /etc/init.d/grafana-server start
$ sudo chkconfig grafana-server on
http://localhost:13000/ へアクセス
admin/admin でログインし初回パスワード変更を実施
Datasourceを追加
[Create your first data source] -> [Add data source] -> [Prometheus] -> [Select]
[Save & Test]をクリックすると"Data source is working"が表示された。
Dashboard作成
Dashboards - Official & community built dashboards からjsonファイルをダウンロードする。
左のプラスマークから[Import] -> [Upload .json file]を選択してアップロードする。
Environment file
$ cat /etc/sysconfig/grafana-server
GRAFANA_USER=grafana
GRAFANA_GROUP=grafana
GRAFANA_HOME=/usr/share/grafana
LOG_DIR=/var/log/grafana
DATA_DIR=/var/lib/grafana
MAX_OPEN_FILES=10000
CONF_DIR=/etc/grafana
CONF_FILE=/etc/grafana/grafana.ini
RESTART_ON_UPGRADE=true
PLUGINS_DIR=/var/lib/grafana/plugins
PROVISIONING_CFG_DIR=/etc/grafana/provisioning
# Only used on systemd systems
PID_FILE_DIR=/var/run/grafana
Configuration
/etc/grafana/grafana.ini
PromQL
以下、node_exporterを入れたサーバ(localhost:9100)に関する受信(bytes)の出力結果。
node_network_receive_bytes_total
アウトプット例:
Element | Value |
---|---|
node_network_receive_bytes_total{device="enp0s3",instance="localhost:9100",job="node"} | 54247 |
node_network_receive_bytes_total{device="lo",instance="localhost:9100",job="node"} | 354136 |
node_network_receive_bytes_total{device="virbr0",instance="localhost:9100",job="node"} | 0 |
node_network_receive_bytes_total{device="virbr0-nic",instance="localhost:9100",job="node"} | 0 |
ラベルの正規表現例
virbrがつくdevice情報をすべて出力
node_network_receive_bytes_total{device=~"virbr.+"}
deviceがvirbr0 or virbr0-nicのものを出力
node_network_receive_bytes_total{device=~"virbr0|virbr0-nic"}
metricの正規表現
node_network_receive_bytes_totalとnode_network_transmit_bytes_totalの両方をクエリする。
{__name__=~"node_network_(receive|transmit)_bytes_total"}
rate() 指定時間毎の値
- counterのみに使用すること。
node_network_receive_bytes_totalのように時間に比例してデータが蓄積されていくため、時間毎のデータを出力したい場合に使用。
10分毎の値
rate(node_network_receive_bytes_total[10m])
ランキング
上位5個のデータを返す。
topk(5, max_over_time(node_network_receive_bytes_total[30m]))
演算子
下記のような演算子も記述可能。
rate(node_network_transmit_bytes_total[10m])+ 1000 / 10 * 20 - 5 ^ 2 % 2
比較演算子
==
、!=
、>
、>=
、<
、<=
が使用可能。
rate(node_network_receive_bytes_total[10m]) !=0
rate(node_network_receive_bytes_total[10m]) <= 1000
グルーピング
instance="localhost:9100"のものをグループして合計値を取得する。
sum(node_network_receive_bytes_total) by (instance)
sum(rate(node_network_receive_bytes_total[5m])) by (instance)
ゲージ
- 決まった範囲の値が上下するメモリなどに使う。
max_over_time
、min_over_time
、avg_over_time
functions.
max_over_time(node_memory_MemFree_bytes[5m])