Grafana 10.2.3をRocky Linux 8.8へインストールしてPrometheusをデータソースとしたグラフを作成
目次
概要
我が家のRaspberry Pi 4B(以下ラズパイ4)にPrometheusとNode Exporterをインストールしてシステムのメトリクス情報を収集するようにしています。 収集した情報をカッコ良くグラフ化して見ることができないか調べてみたところ、GrafanaがPrometheusとの親和性も良さそうだったので 試しにインストールして動作確認してみました。 構成としてはラズパイ4にPrometheusとNode Exporterが既にインストール済みで稼働中となります。 本ページはこのラズパイ4に追加でGrafanaをインストールして、Prometheusからメトリクス情報を取得する時の手順となっています。 インストールと最低限の初期設定はGrafanaの公式ページを見ながら実施しました。 Grafana上でPrometheusのデータソースを作成してダッシュボードにグラフを表示するところは実際に画面を見ながら直感的にやってみたので、 設定の導線として正しいのかやや不安がありますが、正常にグラフ化できたので間違ってはいないと思います。
なお、我が家にはラズパイ4Bが4台、その他Rock 4+/5B/5Aといった計7台のSBC(Single Board Computer)があるので、 最終的には全SBCから取得したメトリクスをGrafanaのダッシュボードに表示して健全に稼働しているか可視化できるようにしたいと考えています。
構成
サーバ構成
ハードウェア
Raspberry Pi 4 Model B 4GB
OS
Rocky Linux release 8.8 (Green Obsidian) aarch64
ソフトウェア・パッケージ
- grafana-10.2.3-1.aarch64.rpm
- prometheus-2.48.1.linux-arm64.tar.gz
- node_exporter-1.7.0.linux-arm64.tar.gz
操作端末構成
OS
Windows 11 Pro 23H2
ソフトウェア
- Microsoft Edge バージョン 120.0.2210.133 (公式ビルド) (64 ビット)
環境構築
インストール
GrafanaのRPMパッケージのダウンロード
Grafanaのインストールに必要なRPMパッケージは、公式サイトからダウンロードできます。 公式サイト上でバージョン、エディション、OSを指定すると、ダウンロード元のURLが表示されますので、wgetでダウンロードします。
# cd /media/rpms/ # wget https://dl.grafana.com/oss/release/grafana-10.2.3-1.aarch64.rpm --2024-01-14 17:41:18-- https://dl.grafana.com/oss/release/grafana-10.2.3-1.aarch64.rpm Resolving dl.grafana.com (dl.grafana.com)... 151.101.198.217, 2a04:4e42:87::729 Connecting to dl.grafana.com (dl.grafana.com)|151.101.198.217|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 99925223 (95M) [application/octet-stream] Saving to: ‘grafana-10.2.3-1.aarch64.rpm’ grafana-10.2.3-1.aarch64.rpm 100%[=================================================>] 95.30M 21.2MB/s in 5.3s 2024-01-14 17:41:25 (18.1 MB/s) - ‘grafana-10.2.3-1.aarch64.rpm’ saved [99925223/99925223] # ls -l grafana-10.2.3-1.aarch64.rpm -rw-r--r--. 1 root root 99925223 Dec 19 20:12 grafana-10.2.3-1.aarch64.rpm
Grafanaのインストール
ダウンロードしたファイルをdnfコマンドでインストールします。
# dnf -y install ./grafana-10.2.3-1.aarch64.rpm Last metadata expiration check: 0:50:26 ago on Sun 14 Jan 2024 04:56:34 PM JST. Dependencies resolved. ======================================================================================================================== Package Architecture Version Repository Size ======================================================================================================================== Installing: grafana aarch64 10.2.3-1 @commandline 95 M Installing dependencies: dejavu-fonts-common noarch 2.35-7.el8 baseos 73 k dejavu-sans-fonts noarch 2.35-7.el8 baseos 1.5 M fontconfig aarch64 2.13.1-4.el8 baseos 271 k fontpackages-filesystem noarch 1.44-22.el8 baseos 15 k freetype aarch64 2.9.1-9.el8 baseos 369 k libpng aarch64 2:1.6.34-5.el8 baseos 118 k Transaction Summary ======================================================================================================================== Install 7 Packages Total size: 98 M Total download size: 2.3 M Installed size: 373 M Downloading Packages: (1/6): dejavu-fonts-common-2.35-7.el8.noarch.rpm 269 kB/s | 73 kB 00:00 (2/6): fontpackages-filesystem-1.44-22.el8.noarch.rpm 357 kB/s | 15 kB 00:00 (3/6): fontconfig-2.13.1-4.el8.aarch64.rpm 692 kB/s | 271 kB 00:00 (4/6): libpng-1.6.34-5.el8.aarch64.rpm 1.2 MB/s | 118 kB 00:00 (5/6): freetype-2.9.1-9.el8.aarch64.rpm 1.7 MB/s | 369 kB 00:00 (6/6): dejavu-sans-fonts-2.35-7.el8.noarch.rpm 1.9 MB/s | 1.5 MB 00:00 ------------------------------------------------------------------------------------------------------------------------ Total 1.6 MB/s | 2.3 MB 00:01 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : fontpackages-filesystem-1.44-22.el8.noarch 1/7 Installing : dejavu-fonts-common-2.35-7.el8.noarch 2/7 Installing : dejavu-sans-fonts-2.35-7.el8.noarch 3/7 Installing : libpng-2:1.6.34-5.el8.aarch64 4/7 Installing : freetype-2.9.1-9.el8.aarch64 5/7 Installing : fontconfig-2.13.1-4.el8.aarch64 6/7 Running scriptlet: fontconfig-2.13.1-4.el8.aarch64 6/7 Installing : grafana-10.2.3-1.aarch64 7/7 Running scriptlet: grafana-10.2.3-1.aarch64 7/7 ### NOT starting on installation, please execute the following statements to configure grafana to start automatically using systemd sudo /bin/systemctl daemon-reload sudo /bin/systemctl enable grafana-server.service ### You can start grafana-server by executing sudo /bin/systemctl start grafana-server.service POSTTRANS: Running script Running scriptlet: fontconfig-2.13.1-4.el8.aarch64 7/7 Verifying : dejavu-fonts-common-2.35-7.el8.noarch 1/7 Verifying : dejavu-sans-fonts-2.35-7.el8.noarch 2/7 Verifying : fontconfig-2.13.1-4.el8.aarch64 3/7 Verifying : fontpackages-filesystem-1.44-22.el8.noarch 4/7 Verifying : freetype-2.9.1-9.el8.aarch64 5/7 Verifying : libpng-2:1.6.34-5.el8.aarch64 6/7 Verifying : grafana-10.2.3-1.aarch64 7/7 Installed: dejavu-fonts-common-2.35-7.el8.noarch dejavu-sans-fonts-2.35-7.el8.noarch fontconfig-2.13.1-4.el8.aarch64 fontpackages-filesystem-1.44-22.el8.noarch freetype-2.9.1-9.el8.aarch64 grafana-10.2.3-1.aarch64 libpng-2:1.6.34-5.el8.aarch64 Complete!
設定
Grafanaの起動と自動起動設定
インストール直後はGrafanaは停止状態となっており、自動起動の設定も無効になっています。 Linuxの起動に合わせてSystemdで自動起動するように設定を変更しつつ、Grafanaを起動します。 Systemdのサービス名は grafana-server となっています。 起動が完了したらプロセスが存在しているかも確認します。プロセス名は grafana です。
# systemctl status grafana-server ● grafana-server.service - Grafana instance Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: disabled) ←自動起動無効 Active: inactive (dead) ←停止状態 Docs: http://docs.grafana.org Jan 14 20:53:42 rpi4b01 systemd[1]: /usr/lib/systemd/system/grafana-server.service:28: Unknown lvalue 'ProtectClock' in> Jan 14 20:53:42 rpi4b01 systemd[1]: /usr/lib/systemd/system/grafana-server.service:31: Unknown lvalue 'ProtectHostname'> Jan 14 20:53:42 rpi4b01 systemd[1]: /usr/lib/systemd/system/grafana-server.service:32: Unknown lvalue 'ProtectKernelLog> Jan 14 20:53:42 rpi4b01 systemd[1]: /usr/lib/systemd/system/grafana-server.service:35: Unknown lvalue 'ProtectProc' in > # systemctl --now enable grafana-server Synchronizing state of grafana-server.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable grafana-server Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service. # systemctl status grafana-server ● grafana-server.service - Grafana instance Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; enabled; vendor preset: disabled) ←自動起動有効 Active: active (running) since Sun 2024-01-14 20:55:20 JST; 8s ago ←起動状態 Docs: http://docs.grafana.org Main PID: 12011 (grafana) Tasks: 17 (limit: 23840) CGroup: /system.slice/grafana-server.service mq12011 /usr/share/grafana/bin/grafana server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/g> Jan 14 20:55:20 rpi4b01 systemd[1]: Started Grafana instance. Jan 14 20:55:20 rpi4b01 grafana[12011]: logger=ngalert.state.manager t=2024-01-14T20:55:20.155353609+09:00 level=info m> Jan 14 20:55:20 rpi4b01 grafana[12011]: logger=ngalert.multiorg.alertmanager t=2024-01-14T20:55:20.179935464+09:00 leve> Jan 14 20:55:20 rpi4b01 grafana[12011]: logger=http.server t=2024-01-14T20:55:20.198039255+09:00 level=info msg="HTTP S> Jan 14 20:55:20 rpi4b01 grafana[12011]: logger=sqlstore.transactions t=2024-01-14T20:55:20.200222986+09:00 level=info m> Jan 14 20:55:20 rpi4b01 grafana[12011]: logger=ngalert.state.manager t=2024-01-14T20:55:20.273722163+09:00 level=info m> Jan 14 20:55:20 rpi4b01 grafana[12011]: logger=ngalert.scheduler t=2024-01-14T20:55:20.274594418+09:00 level=info msg="> Jan 14 20:55:20 rpi4b01 grafana[12011]: logger=ticker t=2024-01-14T20:55:20.274930935+09:00 level=info msg=starting fir> Jan 14 20:55:20 rpi4b01 grafana[12011]: logger=grafana.update.checker t=2024-01-14T20:55:20.326898726+09:00 level=info > Jan 14 20:55:20 rpi4b01 grafana[12011]: logger=plugins.update.checker t=2024-01-14T20:55:20.476583161+09:00 level=info > # ps -ef | grep grafana | grep -v grep grafana 12011 1 0 Jan14 ? 00:00:48 /usr/share/grafana/bin/grafana server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-server.pid --packaging=rpm cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins cfg:default.paths.provisioning=/etc/grafana/provisioning
Firewalldの設定
Grafana起動後にGrafanaがリッスンしているポートをssコマンドを使って調べると3000番を使用していることが分かります。 インストールしただけだと以降の手順でPCのブラウザからGrafanaへアクセスしようとするとエラーになったので、 ファイアウォールの設定でGrafanaに対する外部からの通信を許可します。 ポート番号 3000 を指定して通信許可しても良いですし、Grafanaの場合 grafana というサービス名を指定することもできます。 今回は grafana というサービス名を指定して許可しています。
# ss -tanp | grep grafana | grep LISTEN
LISTEN 0 4096 *:3000 *:* users:(("grafana",pid=12011,fd=15))
# firewall-cmd --get-active-zones
public
interfaces: eth0
# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports: 22/tcp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
# firewall-cmd --add-service=grafana --zone=public --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client grafana ssh ←grafanaが追加された
ports: 22/tcp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
ブラウザからGrafanaインスタンスへログイン
細かい設定は色々ありますが、上記だけでも最低限Grafanaを利用する事ができるようになりましたので、 Windows PCのブラウザからGrafanaインスタンスへアクセスしてみます。 http://サーバのIPアドレス:3000 でアクセスすると、Grafanaのログイン画面が表示されます。 初期ユーザとしては admin ユーザが利用できるようになっています。 adminユーザの初期パスワードは admin です。 [Email or username] と [Password] を入力して [log in] ボタンをクリックします。
初期パスワードの変更
ログインに成功するとパスワードの変更画面画面が表示されます。 新しいパスワードを2回入力して [Submit] ボタンをクリックします。
Prometheus用のデータソースの作成
ログインに成功するとGrafanaの「Home」画面が表示されます。 Prometheusで収集している情報をダッシュボードで表示できるようにするために、 まずはPrometheus用のデータソースを作成します。 画面左上のハンバーガーメニューをクリックします。
メニューが表示されるので、[Connections] の中の [Add new connection] をクリックします。
「Add new connection」画面が表示されたら、[Prometheus] をクリックします。
「Prometheus Data Source」画面が表示されたら、画面右上の [Add new data source] ボタンをクリックします。
prometheusの「Data source」設定画面が表示されます。
画面を少し下にスクロールして [Connection] 項目の [Prometheus server URL] を入力します。 今回はGrafanaが起動しているのと同じサーバ上で稼働しているPrometheusへポート9090で接続しますので、 『http://localhost:9090』を入力しています。
続いて画面一番下の [Save & test] ボタンをクリックします。 私の環境の場合、その他の設定は変更しなくても良さそうだったので、デフォルトのままにしましたが、 接続するPrometheusに合わせて適宜設定してください。
GrafanaからPrometheusへの接続に成功すると画面一番下に「Successfully queried the Prometheus API.」と表示されます。
Prometheusから取得した情報を使ってダッシュボードにグラフを追加
データソースの作成に成功したら続いてPrometheusから取得した情報を元にグラフを作成してみます。 ダッシュボードの作成は次回ゆっくりやってみようと思うので、Prometheusから情報を取得できていて、 グラフ化できることを確認します。 画面左上のハンバーガーメニューをクリックし、メニューの中から [Connections] 項目の [Data sources] をクリックします。
「Data sources」画面が表示されたら、作成したprometheusのデータソースが表示されるので、[Build a dashboard] をクリックします。
「New dashboard」画面が表示されたら、[+ Add visualization] ボタンをクリックします。
「Select data source」画面が表示されたら [prometheus] をクリックします。
「Edit panel」画面が表示されます。 Prometheusに対するクエリを作成していきますが、動作確認的にメモリ使用率を表示してみたいと思うので クエリ画面の右上辺りにある [Builder | Code] の切り替えスイッチをクリックして [Code] を選択した状態にします。
入力フォームが変わり、クエリのコードを直接入力できるようになるので、 事前にPrometheus上で確認しておいたメモリ使用率取得用のコードを入力します。 今回の例では以下のように入力しています。 ※これがメモリ使用率という意味で正確かどうかは一旦置いておきます。
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
続いて [Run queries] ボタンをクリックすると、画面左上にクエリでPrometheusから取得した情報を元にグラフが表示されます。
画面右の [Panel options] の [Title] に作成するパネルのタイトルを入力します。 今回試した環境ではラズパイ4上でPrometheusとGrafanaを稼働させていて、このラズパイ4からNode Exporterでシステムのメトリクス情報を取得しているので、 『Raspberry Pi 4B #1 Memory Usage Rate』と入力しています。(動作確認しているだけなので何でも良いですが)
続いて画面右のオプションリストを下にスクロールすると [Standard options] の [Unit] という項目がありますので、 [Percent (0-100)]を選択すると、パネル上のメモリ使用率の単位に%が表示されて分かりやすくなります。
画面右上の [Apply] ボタンをクリックします。
パネルの編集が終わりダッシュボード上にパネルが1つ作成されます。 こんな感じでダッシュボード上にパネルを作成して自分好みのダッシュボードを作成していくのだと思いますが、 今回はGrafanaからPrometheusのデータを取得できているかを確認するところまでが目的だったので、 作成したダッシュボードは保存せずに破棄して終わりにします。。