直到使用VPS将Prometheus部署并通过Alertmanager发送电子邮件通知
首先
-
- Prometheusの特にAlertmanagerを試したくて今回構築しました
VPSやメール配信サービスも含めて申込からはじめるというほぼゼロスタートです
申込方法や外部サービスの設定は割愛します
环境
普罗米修斯等版本。
-
- prometheus-1.7.1.linux-amd64
-
- node_exporter-0.14.0.linux-amd64
- alertmanager-0.7.1.linux-amd64
服务器
DTI ServersMan@VPS
CentOS 7 (64bit)
HDD:50GB
メモリ:1GB
原因:
- 安くてrootが使えるため。
发送电子邮件
SendGrid
プラン:シンプル
SMTP
原因:
-
- 無料でけっこうな数のメールが送れるため。
-
- 審査はしっかりしているのでお名前.comでドメインを取りました。
- より開発者に使いやすいmailgunというサービスもあるようです。
SSH客户端
- vSSH
原因:
-
- iOSで使えるため。
- 最初はLite(無料)でしたがセッションが2個までだったので途中で有料にしました。
工作客户
-
- iPhone7
-
- Bluetoothキーボード
-
- ディスプレイとコネクタ
AirPlay
Apple純正コネクタ
原因:
解释:
说明:
理由是:
-
- 特に理由はありません。
- ノートPCなど使いやすい環境で大丈夫だと思います。
步驟
普罗米修斯
下载
-
- 適当なディレクトリに移動します
置きポンで動くのがいいところです
圧縮ファイルをダウンロードします
他のバージョンはこちら
$ wget https://github.com/prometheus/prometheus/releases/download/v1.7.1/prometheus-1.7.1.linux-amd64.tar.gz
- 直接ダウンロードできない環境ではインターネットにつながる環境でダウンロードしたファイルをサーバ上に配置します
解冻
- ダウンロードしたファイルを解凍します
$ tar xvfz prometheus-1.7.1.linux-amd64.tar.gz
- ディレクトリが出来ます
$ ls
prometheus-1.7.1.linux-amd64
prometheus-1.7.1.linux-amd64.tar.gz
设定
- 出来たディレクトリに移動します
$ cd prometheus-1.7.1.linux-amd64
- 元々ある設定ファイルをバックアップします(念のため)
$ cp prometheus.yml prometheus.yml.bkyyyymmdd
$ ls
prometheus.yml
prometheus.yml.bkyyyymmdd
除了其他目录和文件,这里只列举了一部分。
- 元々書いてある内容をすべて消して下記を書きます。
global:
scrape_interval: 5s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
先驱性地启动
-
- 実行します
-
- INFOログが数行出てきます
最後にリッスンしているポート番号が出てきます
$ ./prometheus -config.file=prometheus.yml
INFO[0000] Starting prometheus (version=1.7.1, branch=master, revision=3afb3fffa3a29c3de865e1172fb740442e9d0133 source="main.go:88"
・・・
INFO[0001] Listening on :9090 source="web.go:259"
确认
-
- 先ほどのポートにアクセスします
- 次のような画面が開きます
如果可以通过互联网访问,请将”localhost”替换为Glocal IP或域名。
http://localhost:9090/graph
- prometheus本体が収集(?)しているメトリクスは次のURLで確認できます
http://localhost:9090/metrics
-
- prometheusやexporterのUPや、メモリ使用率は次のURLで確認できます
まだ開発途中のようですが十分使えます。
http://localhost:9090/consoles/prometheus.html
停止
-
- 起動したセッションで、Ctrl + c を押します
- stoppedのようなINFOログがでます
・・・
INFO[1129] Local storage stopped. source="storage.go:484"
$
Node_exporter
下载
-
- 適当なディレクトリに移動します
exporterも置きポンです
圧縮ファイルをダウンロードします
$ wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.14.0.linux-amd64.tar.gz
解冻
- ダウンロードしたファイルを解凍します
$ tar xvfz node_exporter-0.14.0.linux-amd64.tar.gz
- ディレクトリが出来ます
$ ls
node_exporter-0.14.0.linux-amd64
node_exporter-0.14.0.linux-amd64.tar.gz
设定
- prometheusディレクトリに移動します
$ cd ../prometheus-1.7.1.linux-amd64
- 下記をprometheus.ymlのscrape_configs:に追記します
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
- prometheus.ymlはこうなります
global:
scrape_interval: 5s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
暂时先启动
-
- 実行します
-
- INFOログが数十行出てきます
最後にリッスンしているポート番号が出てきます
$ ./node_exporter
INFO[0000] Starting node_exporter (version=0.14.1, branch=master, revision=840ba5dcc71a084a3bc64cb606003c1f94435a6 source="node_exporter.go:140"
・・・
INFO[0000] Listening on :9100 source="node_exporter.go:186
确认
-
- 先ほどのポートにアクセスします
- 次のような画面が開きます
http://localhost:9100/metrics
有一个与 Prometheus 不同的地方,就是它有以 “node_” 开头的指标。
-
- prometheusのconsole画面の左側にnodeとあるのでクリックします
- node_exporterがUPしてるのが分かります
http://localhost:9090/consoles/prometheus.html
停下来
- 起動したセッションで、Ctrl + c を押します
※ 在我的环境中,没有看到类似于“stopped”的停止日志,而是返回到了控制台界面。
^C
$
警报管理器
下载。
-
- 適当なディレクトリに移動します
これもほぼ置きポンです
圧縮ファイルをダウンロードします
$ wget https://github.com/prometheus/alertmanager/releases/download/v0.7.1/alertmanager-0.7.1.linux-amd64.tar.gz
- 直接ダウンロードできない環境ではインターネットにつながる環境でダウンロードしたファイルをサーバ上に配置します
解冻
- ダウンロードしたファイルを解凍します
$ tar xvfz alertmanager-0.7.1.linux-amd64.tar.gz
- ディレクトリが出来ます
$ ls
alertmanager-0.7.1.linux-amd64
alertmanager-0.7.1.linux-amd64.tar.gz
在Alertmanager的.yml文件中进行设置。
在这里可以设置诸如「将在xx秒内到达的警报视为相同」或「通知一次后,下一次通知将在xx小时后」等功能。
我个人认为这是Alertmanager的最佳功能之一。
在这里还可以设置使用的电子邮件服务器的地址,以及发件人和收件人等信息。
- 出来たディレクトリに移動します
$ cd alertmanager-0.7.1.linux-amd64
- 元々ある設定ファイルをバックアップします(念のため)
$ cp simple.yml simple.yml.bkyyyymmdd
$ ls
simple.yml
simple.yml.bkyyyymmdd
-
- 次の内容で修正していきます
全て消してこれだけ書いても大丈夫だとは思いますが、まだ私はやっていません
SendGridを利用しています
global:
smtp_smarthost: 'smtp.sendgrid.net:587'
smtp_from: 'aaaaaaa@jibunnodomain.net'
smtp_auth_name: 'apikey'
smtp_auth_password: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
templates:
- '/etc/alertmanager/template/*.tmpl'
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
group_interval: 15m
repeat_interval: 10m
receiver: team-Z-mails
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'cluster', 'service']
receivers:
- name: 'team-X-mails'
email_configs:
- to: 'xxxxxxx@jibundomain.net'
- name: 'team-Y-mails'
email_configs:
- to: 'yyyyyyy@jibundomain.net'
- name: 'team-Z-mails'
email_configs:
- to: 'zzzzzzz@taninnodomain.ne.jp'
被吸引的要素(SendGrid)
-
- smtp_authの、’apikey’は 固定文字列(アルファベットで apikey ) です。
-
- smtp_auth_passwordは、APIキーを作成したときに自動で設定されるとても長い英字の文字列です
- smtp_fromの、@以降は取得したドメインにしましょう。@以前はなんでもいいようです。
在Prometheus的规则文件中进行设置。
在这里,设置触发警报的规则。
- prometheusディレクトリに移動します
$ cd ../prometheus-1.7.1.linux-amd64
- 空の.rulesファイルをつくります。
$ touch alerts.rules
$ ls
alerts.rules
- 次の内容で修正していきます
ALERT InstanceDown
IF up == 0
FOR 5m
LABELS { severity = "critical" }
ANNOTATIONS {
summary = "Instance {{ $labels.instance }} down",
description = "{{ $labels.instance }} of job {{ $labels.job }}"
}
指定设置(指定规则文件名)
- prometheusディレクトリに移動します
$ cd ../prometheus-1.7.1.linux-amd64
- 下記をprometheus.ymlに追記します
rule_files:
- 'alerts.rules'
- prometheus.ymlはこうなります
global:
scrape_interval: 5s
rule_files:
- 'alerts.rules'
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
先暂停看,我们来启动它。
-
- 実行します
-
- INFOログが数行出てきます
最後にリッスンしているポート番号が出てきます
$ ./alertmanager -config.file=simple.yml -mesh.peer-id=00:00:00:00:00:00
INFO[0000] Starting alertmanager (version=0.7.1, branch=master, revision=ab4138299b94c8dc554ea96e2ab28d04b048059 source="main.go:109"
・・・
INFO[0000] Listening on :9093 source="main.go:308"
遇到的问题(Alertmanager无法启动)
- とりあえず実行したら下記のようなエラーが出て起動できない
$ ./alertmanager -config.file=simple.yml
panic: no valid network interfaces
gorouting 1 [running]:
main.mustHardwareAddr(0xc7f3e0, 0xc4200fal60)
/go/src/github.com/prometheus/alertmanager/cmd/alertmanager/main.go:477 +0x14f
main.main()
/go/src/github.com/prometheus/alertmanager/cmd/alertmanager/main.go:97 +0x2748
$
こちらのページを読んで、仮想サーバはMACAddressを敢えて設定しない事があるからAlertmanagerがMACAddressを一意値として利用しているが取得できていないと解釈(合ってるかはわかりません)
-mesh.hardware-addr オプションを付ければよさそうだが、付けてもそのようなオプションはないと
もう少し調べると -mesh.hardware-addr ではなく -mesh.peer-id とのgithubページ を見つける
オプションの引数(String)を何を設定していいかわからないので、とりあえずMACAddressっぽい文字列「00:00:00:00:00:00」を入れる
起動成功!
确认
-
- 先ほどのポートにアクセスします
- 次のような画面が開きます
http://localhost:9093/#/status
停下
-
- 起動したセッションで、Ctrl + c を押します
- exiting grecefullyとmaintenance doneのようなINFOログがでます
・・・
INFO[0173] received SIGTERM, exiting gracefully... source="main.go:335"
・・・
INFO[0173] maintenance done component=nflog duration=238.638μs source="nflog.go:286"
$
确认可以通过电子邮件通知吗?
-
- node_exporter → prometheus → alertmanagerの順で起動します
prometheusの起動オプションに-alertmanager.url=http://localhost:9093 を追加します
$ ./node_exporter
$ ./prometheus -config.file=prometheus.yml -alertmanager.url=http://localhost:9093
$ ./alertmanager -config.file=simple.yml -mesh.peer-id=00:00:00:00:00:00
-
- prometheusのメニューから次を確認していきます
- Status>Targetsを確認します
http://localhost:9090/targets
- Status>Rulesを確認します
- Alertsを確認します
- node_exporterだけ停止します
- 再度、Alertsを確認します
- 5分後にAlertsを確認します
- 通知メールの受信を確認します
- しばらくして再度通知メールの受信を確認します
最后
-
- ほぼ置きポンでここまでいきつけるのがとても好印象です
-
- Prometheus周りで大きくハマることも少なかったです
-
- 特にAlertmanagerがよく考えられてて、システム運用を長年やってきた者としてもっと使っていきたいと思いました
テキストログの監視ができるようになればな、と思いました
動画で「metrics, not logs.」と説明されてたので、自分で対応するしかないと思ってます。情報あればほしいところです。
正直、私はあまりこういう構築系はやってきませんでした
Linuxコマンド(wgetやvimの使い方)をGoogleで調べながら進めています
そんな自分でも3~4日くらいでできました!
请提供参考资料
-
- Prometheus.io – Getting Started
-
- Monitoring a Machine with Prometheus: A Brief Introduction
-
- Keynote: Prometheus: From Berlin to Bonanza – Brian Brazil, CEO, Robust Perception
-
- 次世代監視の大本命! Prometheus を実運用してみた
-
- 長生村本郷Engineers’Blog – Alertmanager 構築手順
- 1.0が出てたのでPrometheusに入門してみた
非常感谢您的帮助,我真的从中获得了很多启发。