Grafanaの導入メモ
Prometheus + Grafanaでサーバの監視をするメモの第一弾として、Grafanaを導入してZabbixのデータを表示させたメモ。
環境
- OS: Ubuntu 20.04.2
Grafanaのインストール
公式ページhttps://grafana.com/docs/grafana/latest/installation/debian/によると、Ubuntu向けにaptリポジトリが用意されているとのことなので、こちらからインストールする。
また、OSS版とEnterprise版があるが、基本的にはEnterprise版のインストールが推奨とのことなので、そちらに従う。
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/enterprise/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana-enterprise
自動起動を有効にしながら起動してみる。
sudo systemctl daemon-reload
sudo systemctl enable --now grafana-server
起動後、http://127.0.0.1:3000/にアクセスしてGUIを確認。
admin/adminでログインできる。
Chromeだとログインした瞬間に以下のようなダイアログが出るが無視。
ちなみに、Enterprise版をインストールしているため、ライセンスを購入すればアップグレードすることができる。
ログイン後、左のメニューの盾マーク(Server Admin)の中のUpgradeがその関連のメニュー。アップグレード後に解放される機能などが出てくるので、見てみると面白い。
Zabbix + Grafana
ZabbixにGrafana用ユーザの作成
この項目は実施しなくても、GrafanaにAdminユーザを登録すれば動作するが、セキュリティ的にあまり気分が良くないので、Grafana専用のユーザを作成する。
方法は簡単で、Zabbix UIにログインして左のメニューから「管理」->「ユーザー」の順に選択。
その後、右上の「ユーザーの作成」を押して、ユーザー名などを入れる。
Grafana用ユーザがZabbix UIにアクセスすることはないため、グループは No access to the frontend
を指定した。
権限は、読み取り専用の権限を適当に付与すればOK。
Zabbix 5.4ではロールを選択する方式になっていたため、User roleを選択した。
Zabbix プラグインの導入
最終的な目標はZabbixではなくPrometheusでデータの収集を行うことだが、とりあえずGrafanaの雰囲気をつかむために、Zabbixプラグインを導入して既存のZabbixサーバと連携させる。
まずはプラグインのインストール。Prometheusは既に組み込まれているが、Zabbixは組み込まれていないため、追加作業が必要になる。
# アンインストールの際は install -> remove
sudo grafana-cli plugins install alexanderzobnin-zabbix-app
sudo service grafana-server restart
GrafanaのGUIでConfiguration(歯車マーク) -> Plugins -> Zabbixと進み、Enableボタンをクリック。
Zabbix をデータソースとして追加
プラグインの有効化が終わったら、Zabbix ServerをData Sourceとして追加する。
GrafanaのGUIでConfiguration(歯車マーク) -> Data Sources -> Add data source -> Zabbixの順にクリック。
URLにZabbix ServerのAPIのパス (例: http://localhost/zabbix/api_jsonrpc.php)を入力し、 Username、Passwordを入力し、一番下のSave & Testを押す。
緑でZabbix APIのバージョンが表示されればOK。
ダッシュボードを作成
データソースを追加しただけでは何も表示されないので、ダッシュボードを作成していく。
GrafanaのGUIでCreate(+マーク) -> Dashboardを押すと、まっさらなダッシュボードが出てくる。
そのまま青い「+ Add new panel」ボタンを押すと、Zabbixのアイテムを指定する画面に入るので、Group, Host, Application, Itemの順に設定すると、上部に選択したアイテムのグラフが現れる。
グラフを追加したい場合は、下の「+ Query」で追加できる。同じホストのアイテムを追加したい場合は、設定し終わったクエリの右上のコピーマークから複製すると早いかもしれない。
このままだと、グラフの凡例がアイテム名のままになってしまうため、変更したい場合はFunctionsの横の+を押して、Alias -> setAliasを押し、表示したい名前を入力する。
Receivedだけエイリアスを設定して、右のPanel Settingsでタイトルを変更してみた様子が以下の通り。
設定が終わったら右上のApplyで確定させる。
ダッシュボードに戻るので、上部のグラフアイコンみたいなやつ(Add panel)をクリックすれば、またパネルを増やすことができる。
パネル同士の位置関係は、パネルの名前のあたりをドラッグすることで入れ替えられる。
また、パネルの右下をクリックすることで、パネルの大きさを変更することができる。
パネルの追加が終わったら、上部のバーの歯車を押して、ダッシュボードの名前を変更する。
そして、最後にSave Dashboardを押せば完成。
ダッシュボードの上部では、表示する期間の変更などができる。良い。
(おまけ) Direct DB Connectionする
以上の操作でZabbixのデータをGrafanaに表示することができるが、このままだとZabbix API経由でのデータ取得になり、たぶん効率的ではない。
代わりに、Direct DB Connectionを設定することで、GrafanaからZabbixのDBに直接アクセスしてデータを取得することができる。
詳しい設定方法はZabbixプラグインの公式ページに記載されている。
https://alexanderzobnin.github.io/grafana-zabbix/configuration/direct_db_datasource/
DBをGrafana用ユーザを作成する
まずはDB側にGrafana用のユーザを作成し、ZabbixのDBのSELECT権限のみを与える。
例えばMySQLの場合は以下のSQLを実行する。
GRANT SELECT ON zabbix.* TO 'grafana'@'grafana-host' identified by 'password';
今回は、バックエンドDBがPostgreSQL、Zabbix、DB、Grafanaが動いているサーバがすべて同一、またZabbixのDBはデフォルトのzabbix
であるため、以下のようにSQLを実行した。
suuei@monitor$ sudo su postgres -c 'psql'
psql (12.7 (Ubuntu 12.7-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
(あんまり自信ない)
CREATE USER grafana PASSWORD 'password';
\c zabbix
-- GRANT SELECT ON ALL TABLES IN SCHEMA public TO grafana;
GRANT SELECT ON history,history_uint,trends,trends_uint TO grafana;
exit
DBをデータソースに追加する
Zabbixをデータソースに追加した方法と同じように、使用しているDBをデータソースに追加する。
今回はPostgreSQL
を追加。分かりやすいようにName
をPostgreSQL-Zabbix
とした。
Databaseをzabbix
、UserとPasswordに上記のSQLで作成した情報を入力。
TLS/SSL Modeをrequire
に設定し、下の方のPostgreSQL details
でPostgreSQLのバージョン情報をあわせて、Save & testを実行。
Database Connection OK
と表示されたら追加完了。
Direct DB Connectionを有効にする
最後に、ConfigurationのData sourcesからZabbixを選び、Direct DB ConnectionをEnableに変更する。その後、Data Sourceに上記で追加したデータソース(今回はPostgreSQL-Zabbix
)を設定して、Save&testを実行すれば完了。