Monitoring Linux Processes using Prometheus and GrafanaーPart 2

Prometheus とGrafanaを使ってのLinuxプロセスのモニタリングー第二章

gavin.zhou
12 min readJan 15, 2020

Prometheus とGrafanaを使ってのLinuxプロセスのモニタリングをする方法を解説します。記事が長いので3回に分けて投稿致します。今回が第二回目です。今回は、Pushgateway Prometheus、Grafanaのインストールや bash スクリプトの構築についてです。

異なるツールのインストール

自分のアプリケーションの中で何が起きているかに対してのよりよいアイデアを得たところで、必要に応じた異なるツールをインストールしましょう。

a –Pushgatewayのインストール

Pushgatewayをインストールするために、シンプルなwgetコマンドを走らせて、最新の利用可能なバイナリーを取得しましょう。

wget https://github.com/prometheus/pushgateway/releases/download/v0.8.0/pushgateway-0.8.0.linux-amd64.tar.gz

アーカイブを取得したので、それを抽出し、pushgatewayフォルダーの中でexecutable availableを走らせます。

> tar xvzf pushgateway-0.8.0.linux-amd64.tar.gz> cd pushgateway-0.8.0.linux-amd64/> ./pushgateway & 

結果として自分のPushgatewayがバックグランドプロセスとしてスタートしなければなりません。

me@schkn-ubuntu:~/softs/pushgateway/pushgateway-0.8.0.linux-amd64$ ./pushgateway &[1] 22806me@schkn-ubuntu:~/softs/pushgateway/pushgateway-0.8.0.linux-amd64$INFO[0000] Starting pushgateway (version=0.8.0, branch=HEAD, revision=d90bf3239c5ca08d72ccc9e2e2ff3a62b99a122e)  source="main.go:65"INFO[0000] Build context (go=go1.11.8, user=root@00855c3ed64f, date=20190413-11:29:19)  source="main.go:66"INFO[0000] Listening on :9091.                           source="main.go:108"

いいですね!

Pushgatewayはポート9091のincomingメトリックをリッスンしています。

b — Prometheusのインストール

Prometheusのウェブサイトの「はじめに」のところで書いてある通り、 https://prometheus.io/download/に行って、シンプルなwgetコマンドを走らせて、自分のOSに対応するPrometheusアーカイブを取得します。

wget https://github.com/prometheus/prometheus/releases/download/v2.9.2/prometheus-2.9.2.linux -amd64.tar.gz

それでは、アーカイブを取得したところで、それを抽出し、メインフォルダーにナビゲートします。

> tar xvzf prometheus-2.9.2.linux-amd64.tar.gz> cd prometheus-2.9.2.linux-amd64/

前述のように、Prometheusは「ターゲット」を定期的にスクラップにし、それらからメトリックを集めます。ターゲット(この場合であればPushgateway)はPrometheusのコンフィギュレーションファイルを通してコンフィグされる必要があります。

> vi prometheus.yml

「global」セクションでは、‘scrape_interval’ プロパティを1秒まで変更します。

global:scrape_interval:     1s # Set the scrape interval to every 1 second.

‘scrape_configs’ セクションでは、static_configsセクションの元で、ターゲットプロパティへエントリーを追加します。

static_configs:- targets: ['localhost:9090', 'localhost:9091']

viを終了し、最終的にそのフォルダーの中でprometheus executableを走らせます。

Prometheusは最後のl prometheusコマンドがローンチしたらスタートします。すべてが正しく動いていることを確認するために、 http://localhost:9090/graphにアクセスしてください

もし、Prometheusのウェブコンソールにアクセスできたら、全てが順調だということです。

またPushgatewayが、Web UIの中の‘Status’ > ‘Targets’ の中でターゲットとして正しくコンフィギュアされているかどうか確認することも可能です。

c — Grafanaのインストール

Ubuntu 18.04上でGrafanaをインストールする方法を探しているのであれば、こちらのリンクにチュートリアルがありますので、それに従ってください。

大事なことを一つ言い忘れていますが、これから、Grafana v6.2をインストールすることにしています。 https://grafana.com/grafana/download/betaこちらにアクセスください

以前にもやったように、シンプルなwgetコマンドを走らせて、それを取得します。

> wget https://dl.grafana.com/oss/release/grafana_6.2.0-beta1_amd64.deb> sudo dpkg -i grafana_6.2.0-beta1_amd64.deb

debファイルを抽出できましたね。grafanaは自分のインスタンス上のサービスとして走らなければいけません。

次のコマンドを走らせてそれを確認してください:

> sudo systemctl status grafana-server● grafana-server.service - Grafana instanceLoaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)Active: active (running) since Thu 2019-05-09 10:44:49 UTC; 5 days agoDocs: http://docs.grafana.org

またhttp://localhost:3000 をチェックすることもできます。これは、Grafana Web UIのデフォルトのアドレスです。

自分のインスタンス上にGrafanaを取得できました。それでは、次はデータソースとしてのPrometheusをコンフィギュアする必要があります。

次の方法で自分のデータソースをコンフィギュアすることが可能です。

これで終了です!

「Save and Test(セーブとテスト)」をクリックして、自分のデータソースが正しく動いているか確認しましょう。

取得するメトリックへ bash スクリプトを構築する

次は、シンプルなbashスクリプトの構築です。これは、ここのプロセスにおけるCPU使用率やメモリー使用率のようなメトリックの取得をします。

自分のスクリプトはcronタスクとして設定されます。これは、後ほど毎秒ごとに走るものです。

このタスクを実行するためには色々な手段があります。

毎秒ごとにtopコマンドを走らせます。sedを使ってそれを解析し、メトリックをPushgatewayへ送ります。

topの難しいところは、それが一定期間のメトリック平均を提供しながら、多くのイテレーション上で走るといところです。これは私たちが探し求めているものとは全く違います。

その代わりに、私たちはpsコマンドを使って(もっと正確に言えばps auxコマンド)行う予定です。

このコマンドはそれぞれのCPUとメモリの使用率やそれの背後にあるexact コマンドをエクスポーズします。これこそ、私たちが求めていたものです。

しかし、先に進む前に、どのPushgatewayがインプットとして予定されているかを見てみましょう。

PushgatewayはとてもPrometheusに似ています。そしてキーバリューペア (KVP)と一緒に機能します。そのキーは監視されるメトリック、そしてバリューはそのまま値を意味します。

こちらに、いくつか例を挙げておきます:

お察しの通り、最初のフォームはシンプルにCPUの使用率を指しています。しかし、二番目のものはjava プロセスのCPU使用率を指しています。

ラベルを追加することで、メトリックがより正確に記述する内容を指定することができます。

それでは、この情報を得たところで、ファイナルスクリプトを構築します。

念のためにお伝えしておきますが、私たちのスクリプトはps auxコマンドとして機能し、結果を解析し、それを変換し、前述のsyntaxを通してPushgatewayへ送ります。

スクリプトファイルを生成し、権限を与えてナビゲートします。

> touch better-top> chmod u+x better-top> vi better-top

こちらにスクリプトを記載しておきます。

#!/bin/bashz=$(ps aux)while read -r zdovar=$var$(awk '{print "cpu_usage{process=\""$11"\", pid=\""$2"\"}", $3z}');done <<< "$z"curl -X POST -H  "Content-Type: text/plain" --data "$var" http://localhost:9091/metrics/job/top/instance/machine

もしメモリー使用率のために同じスクリプトが必要なのであれば、単に‘cpu_usage’を‘memory_usage’に、そして$3zを$4zに変更すればOKです。

では、このスクリプトは何をするのでしょうか?

まず最初に、これは前述の ps auxを実行します。

それから、異なるライン上で繰り返し、前述のキーバリューペアフォーマットに応じてそれをフォーマットします。

最後に、すべてが連結され、シンプルなcurlコマンドを通してPushgateway へ送られます。

簡単ですよね?

お察しの通り、このスクリプトは全てのメトリックをプロセスのためにシュシュします。しかし、一回だけしかイテレーションしません。この場合だと、sleepコマンドを使って単純にそれを毎秒ごとに実行します。

そして後々、毎秒ごとにそれを実行するためのタイマーを伴った(少なくともsystemdを伴った)サービスを作ってもらってもかまいません。

systemdに興味が出てきましたか? Chronograf を使ってsystemdをモニタリングする方法についての完璧なチュートリアルを作成しました。

> while sleep 1; do ./better-top; done;

Monitoring systemd services in realtime with Chronograf

メトリックがPushgatewayに送られたところで、Prometheus Web コンソールの中でそれを検索できるかどうか見てみましょう。

http://localhost:9090.にアクセスしてください。「Expression」フィールドの中で、単純に‘cpu_usage’と入力してください。自分のブラウザの中で全てのメトリックを見ることができます。

おめでとうございます!自分のCPUメトリックがPrometheus TSDBに保存されています。

Orangesys.ioでは、kuberneteの運用、DevOps、監視のお手伝いをさせていただいています。ぜひ私たちにおまかせください。

--

--

No responses yet