直到使用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 Time Series Collection and Processing Server.png
    prometheus本体が収集(?)しているメトリクスは次のURLで確認できます
http://localhost:9090/metrics
localhost9090metrics.png
    • prometheusやexporterのUPや、メモリ使用率は次のURLで確認できます

まだ開発途中のようですが十分使えます。

http://localhost:9090/consoles/prometheus.html
localhost9090consolesnode_prometheus.png

停止

    • 起動したセッションで、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
localhost9100metrics.png

有一个与 Prometheus 不同的地方,就是它有以 “node_” 开头的指标。

    • prometheusのconsole画面の左側にnodeとあるのでクリックします

 

    node_exporterがUPしてるのが分かります
http://localhost:9090/consoles/prometheus.html
localhost9090consolesnode.png

停下来

    起動したセッションで、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
localhost9093status_alertmanager.png

停下

    • 起動したセッションで、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
localhost9090status_up.png
    Status>Rulesを確認します
localhost9090rule_up.png
    Alertsを確認します
localhost9090alerts_up.png
    node_exporterだけ停止します
localhost9090status_down.png
    再度、Alertsを確認します
localhost9090alerts_pending.png
    5分後にAlertsを確認します
localhost9090alerts_firing.png
    通知メールの受信を確認します
alertmanager_firingmail.png
    しばらくして再度通知メールの受信を確認します
alertmanager_firingmail_2.png

最后

    • ほぼ置きポンでここまでいきつけるのがとても好印象です

 

    • 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に入門してみた

非常感谢您的帮助,我真的从中获得了很多启发。

以上的内容

广告
将在 10 秒后关闭
bannerAds