在AWS上搭建Prometheus(1)

以下是在AWS EC2上構建Prometheus時的筆記,如標題所述。
關於Alerting的設置,請參考(2)。

前提 tí)

首先,只需使用.node exporter(作为被监视方)和Prometheus服务器(作为监视方)。
此外,由于担心默认端口可能成为扫描目标之类的问题,我们决定更改启动端口。

监视服务器/被监视的服务器都属于同一个 VPC,并且假设已完成了基本的配置,例如yum的更新等。

另外,由于 Prometheus 本体和 node_exporter 在建立时都是最新版本,所以在建立之前要确认版本是否有更新。据说 Prometheus 的选项在 v1 和 v2 中有些不同,例如仪表板数量从一个变为两个,storage.local.* 也被移除了。所以,如果将这篇类似的文章作为参考资料,也要注意这些细节。

被监视的一方

检查安全组,确保不阻断来自计划将Prometheus安装在私有子网上的t2.micro(el7)实例的通信。作业用户为root。

这个没什么好说的。

安装node_exporter

mkdir /opt/prometheus
cd /opt/prometheus
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
tar -zxf node_exporter-0.17.0.linux-amd64.tar.gz
mv node_exporter-0.17.0.linux-amd64 node_exporter
rm -f node_exporter-0.17.0.linux-amd64.tar.gz

创建并安装node_exporter启动选项文件。

mkdir -p /etc/prometheus/node_exporter
vi /etc/prometheus/node_exporter/env_settings
OPTIONS="--web.listen-address=:9500"

服务注册

vi /usr/lib/systemd/system/node_exporter.service
[Unit]
# そのまんま、いわゆる説明
Description=PrometheusNodeExporter
# ネットワークを「利用」するサービスなのでネットワーク起動後に立ち上がるようにする
After=network.target
# ユニット起動前に該当パスが存在するか確認してくれる
ConditionPathExists=/opt/prometheus/node_exporter

[Service]
# プロセス起動と同時にサービスがグリーンと判断される 起動に時間がかかるようなモノの場合はnotifyでやるんかな?
Type=simple
# 環境変数設定ファイルフルパス systemdはユーザの環境変数は見ないのでこれで設定する
EnvironmentFile=/etc/prometheus/node_exporter/env_settings
# 実行ファイルフルパスとEnvironmentFileに設定されてる起動オプションが詰まった変数
ExecStart=/opt/prometheus/node_exporter/node_exporter $OPTIONS
# プロセスが異常終了したとき自動で再起動を実施してくれるらしい 監視なんだし再起動させよう
# 万全を考えるなら/var/log/messagesを監視して起動時にエラーループしてないか見るのが良いか?
Restart=always

[Install]
# WantedByはmulti-user.targetの起動と同時に起こしてもらえるようになる設定
# ちなみにec2で `systemctl get-default` 叩くと graphical.targetって出るんで一瞬「えっ!?」となったけどgraphical.targetの中身を見ると納得
# それについてはこの記事の最後の参考記事に載せてるのでそちらで
WantedBy=multi-user.target

如果添加了,请确认。
systemctl list-unit-files –type=service | grep node_exporter
如果有显示”disable”,就可以了。

映射和启动

systemctl daemon-reload
systemctl enable node_exporter
systemctl start node_exporter

当预定的实例结束后,从预定为Prometheus服务器的实例上使用curl命令访问http://[[监控目标实例私有IP]]:9500/metrics,如果返回了大量的字符串,则输出”ok”。

监视方

在公共子网上有一个t2.micro(el7)实例。
工作用户为root。
为EC2role分配具有EC2ReadOnlyAccess权限的角色。
为了使用webui, 需要预先将起始端口(本次为TCP:9800)设置为我的IP,并将其附加到安全组中。

安放 Prometheus

mkdir /opt/prometheus
cd /opt/prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.8.1/prometheus-2.8.1.linux-amd64.tar.gz
tar -zxf prometheus-2.8.1.linux-amd64.tar.gz
mv prometheus-2.8.1.linux-amd64 prometheusserver
rm -f prometheus-2.8.1.linux-amd64.tar.gz

创建 Prometheus 配置文件

cp /opt/prometheus/prometheusserver/prometheus.yml /opt/prometheus/prometheusserver/prometheus.yml.bk
vi /opt/prometheus/prometheusserver/prometheus.yml
global:
  scrape_interval:     15s # 各exporterエンドポイントにアクセスするポーリング間隔
  # ruleファイルに基づく評価を実施する間隔 scrapeと別軸になっているあたりDB見に行ってるんだろうなと推測される
  # 設定が15sなら、発動時間の15秒前までのデータ見るとかなんだろうか
  evaluation_interval: 15s

# alertmanager関連の設定 (2)でやる
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# 具体的な評価の仕方と評価結果によって何をするかを記述 alertingやる時にやるので後回し
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# 監視対象設定
# 初回だしシンプルにIPポート指定でいこうと思ったが俺もドヤ顔でサービスディスカバリィとか言いたかったのでec2_sd_configsを使うことに
# キーを記述しなきゃいけんような説明が多くて「え、うそやろこんなんでキー発行したくないで」と思い色々探したら
# prometheus serverが乗っかるインスタンスにEC2ReadOnlyが含まれるロールがアタッチされていればいけるっぽい
# relabelに関しては記事の最後にもっと参考になる記事のリンクを置くのでそちらで
scrape_configs:
  - job_name: 'ec2-test'
    ec2_sd_configs:
      - region: '監視したいインスタンスがいるリージョン っていうかこれリージョンまたげるん…?'
        port: 9500
    relabel_configs:
      - source_labels: [__meta_ec2_tag_Service]
        regex: prom_test
        action: keep
      - source_labels: [__meta_ec2_tag_Name]
        target_label: instance

写完后进行语法检查,使用以下命令检查配置文件/opt/prometheus/prometheusserver/promtool check config /opt/prometheus/prometheusserver/prometheus.yml。

创建和安置prometheus启动选项文件。

mkdir -p /etc/prometheus/prometheusserver
vi /etc/prometheus/prometheusserver/env_settings
OPTIONS="--config.file=/opt/prometheus/prometheusserver/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --storage.tsdb.retention=2d --web.console.libraries=/opt/prometheus/prometheusserver/console_libraries --web.console.templates=/opt/prometheus/prometheusserver/consoles --web.listen-address=:9800"

考虑到这是一次测试,数据将以2天为单位进行描述。

服务注册

vi /usr/lib/systemd/system/prometheus.service
[Unit]
Description=PrometheusServer
After=network.target
ConditionPathExists=/opt/prometheus/prometheusserver

[Service]
Type=simple
EnvironmentFile=/etc/prometheus/prometheusserver/env_settings
ExecStart=/opt/prometheus/prometheusserver/prometheus $OPTIONS
Restart=always

[Install]
WantedBy=multi-user.target

几乎相同,省略说明,请确认:
systemctl list-unit-files –type=service | grep prometheus

表达和启动

systemctl daemon-reload
systemctl enable prometheus
systemctl start prometheus

如果在浏览器中输入以下网址,且页面显示一个实例,则表示一切正常。
http://[[监视实例公共 IP]]:9800/targets

如果没有出现画面的情况下,可以使用journalctl -u prometheus.service命令来检查是否启动失败。

下一步要做的事情

只需一个选择,对以下内容进行中文本地化改写:
由于我需要单独使用fluentd,所以请设置好Alert并在其它事项中加入fluentd进程监控设置。

请参阅

https://prometheus.io/docs/prometheus/latest/configuration/configuration/
https://qiita.com/stkhr/items/a847dd3c84146a194f02
https://qiita.com/ledmonster/items/5f2e1633d4124cb978fe
https://qiita.com/loftkun/items/4bd3bd3dcfd5864c1b6d

https://prometheus.io/docs/prometheus/latest/configuration/configuration/ – Prometheus官方文档,有关配置的信息。

https://qiita.com/stkhr/items/a847dd3c84146a194f02 – 这是一个关于配置的Qiita帖子。

https://qiita.com/ledmonster/items/5f2e1633d4124cb978fe – 这是关于配置的另一篇Qiita帖子。

https://qiita.com/loftkun/items/4bd3bd3dcfd5864c1b6d – 这是有关配置的另一个Qiita帖子。

广告
将在 10 秒后关闭
bannerAds