[[フリーソフトウェアのコンパイル]]

参考

サーバ環境

サーバインストール

$ cd src
$ http_proxy=http://192.168.1.10:8080/
$ https_proxy=http://192.168.1.10:8080/
$ export http_proxy
$ export https_proxy
$ wget https://github.com/prometheus/prometheus/releases/download/v2.27.1/prometheus-2.27.1.linux-amd64.tar.gz
$ cd /usr/local
$ sudo tar xvzf ~jse03/src/prometheus-2.27.1.linux-amd64.tar.gz
$ sudo mv prometheus-2.27.1.linux-amd64 prometheus

ユーザと必要なディレクトリの作成

$ sudo mkdir /etc/prometheus
$ sudo cp -a prometheus/prometheus.yml /etc/prometheus
$ sudo useradd -U -s /sbin/nologin -M -d / prometheus
$ sudo mkdir -p /var/lib/prometheus
$ sudo chown prometheus:prometheus /var/lib/prometheus

サーバの自動起動設定

$ sudo vi /etc/systemd/system/prometheus.service

以下のファイルを新規作成

[Unit]
Description=Prometheus - Monitoring system and time series database

[Service]
Restart=always
User=prometheus
ExecStart=/usr/local/prometheus/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/metrics
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

systemd リロード

$ sudo systemctl daemon-reload

サーバの設定

/etc/prometheus/prometheus.yml を編集する

global:
  scrape_interval:     60s # 1分ごとにデータ取得
  evaluation_interval: 60s # 1分ごとに評価

監視対象は以下で設定する.

scrape_configs:
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

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

#  - job_name: '<ジョブ名>'
#    static_configs:
#      - tagets: ['<対象のホスト名>:<ポート番号9100>']

サーバ起動

$ sudo systemctl start prometheus

ブラウザでアクセス

http://192.168.100.101:9090/

サーバのアクセス制限

Prometheus のサーバには,接続元の制限やユーザ認証などのセキュリティ制限を行う仕組みが備わっていない. アクセス制限をするのであれば,nginx などのリバースプロキシを利用するようにというのが公式見解だ.

なので,ufw でアクセス元の制限をする. (ここでは,ポート 9090 へのアクセスを 192.168.1.100 からのみにしている. その他の接続は,全て allow にしている)

$ sudo ufw default allow
$ sudo ufw allow from 192.168.1.100 to any port 9090
$ sudo ufw deny 9090
$ sudo ufw enable
$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere                  
[ 2] 8080                       ALLOW IN    Anywhere                  
[ 3] 8081                       ALLOW IN    Anywhere                  
[ 4] 9090                       ALLOW IN    192.168.1.100           
[ 5] 9090                       DENY IN     Anywhere                  
[ 6] 22 (v6)                    ALLOW IN    Anywhere (v6)             
[ 7] 8080 (v6)                  ALLOW IN    Anywhere (v6)             
[ 8] 8081 (v6)                  ALLOW IN    Anywhere (v6)             
[ 9] 9090 (v6)                  DENY IN     Anywhere (v6) 

他の接続も追加するなら

$ sudo ufw allow port ssh

クライアントエージェントインストール

とりあえずターゲットは mail サーバ(192.168.1.2)

$ cd src
$ http_proxy=http://192.168.1.10:8080/
$ https_proxy=http://192.168.1.10:8080/
$ export http_proxy
$ export https_proxy
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
$ cd ~/build
$ tar xvfz ../src/node_exporter-1.1.2.linux-amd64.tar.gz
$ cd node_exporter-1.1.2.linux-amd64
$ sudo mkdir -p /usr/local/bin
$ sudo cp node_exporter /usr/local/bin/

ユーザ作成

$ sudo useradd -U -s /sbin/nologin -M -d / prometheus

エージェントの自動起動設定

$ sudo vi /etc/systemd/system/prometheus-node-exporter.service

以下のファイルを新規作成

[Unit]
Description=node_exporter for Prometheus

[Service]
Restart=always
User=prometheus
ExecStart=/usr/local/bin/node_exporter # <起動オプション>
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

起動オプションは

https://github.com/prometheus/node_exporter

を参考にする. デフォルトで取得される統計情報の中で不要なものがあれば、「–no-collector.<名前>」オプションを指定すれば取得対象から除外できる。 また、デフォルトでは収集されない情報を取得対象に加えたい場合は「–collector.<名前>」オプションを指定すれば良い。

init.d のクライアントにインストールするなら以下を参考

https://gist.github.com/eloo/a06d7c70ff2a841b7bb98cd322b851b9 https://gist.github.com/mancubus77/447281619be3731461b73dd4a18593c5

systemd リロード

$ sudo systemctl daemon-reload

Linux エージェント起動(node-exporter)

$ sudo systemctl start prometheus-node-exporter

サーバに監視追加

/etc/prometheus/prometheus.yml を編集する

#  - job_name: '<ジョブ名>'
#    static_configs:
#      - tagets: ['<対象のホスト名>:<ポート番号9100>']
  - job_name: 'mail'
    static_configs:
      - targets: ['192.168.1.2:9100']

サーバ再起動

$ sudo systemctl restart prometheus

Grafana で可視化

インストール

参考 https://grafana.com/docs/grafana/latest/installation/debian/#install-from-apt-repository

apt リポジトリ

https://packages.grafana.com/oss/deb stable main
$ 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/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

$ sudo apt-get update
$ sudo apt-get install grafana

インストールされるパッケージ内容

サーバ起動

$ sudo systemctl daemon-reload
$ sudo systemctl start grafana-server
$ sudo systemctl status grafana-server
$ sudo systemctl enable grafana-server.service

TCP ポート 3000番でサーバが立ち上がる. パスワードはいつものサーバ用の物をつける

Grafana 設定

Web コンソールにログイン後

データソース追加

左側歯車アイコン > [Data Sources] > [Add data sources]> Prometheus > [Select]

ダッシュボード作成

左側 + アイコン > [Dashboard]


Alertmanager インストール

Prometheus に Alert ルール追加

/etc/prometheus/prometheus.yml に追記

global:
  rule_files:
    - "alert_rules.yml"

/etc/prometheus/alert_rules.yml を作成

groups:
  - name: target_status
    rules:
    - alert: scrape_failed
      expr: up == 0
      for: 5m
      labels:
        severity: error
        type: node
      annotations:
        summary: monitoring target failed.

AlertManger のインストール

$ cd src
$ http_proxy=http://192.168.1.10:8080/
$ https_proxy=http://192.168.1.10:8080/
$ export http_proxy
$ export https_proxy
$ wget https://github.com/prometheus/alertmanager/releases/download/v0.22.2/alertmanager-0.22.2.linux-amd64.tar.gz
$ cd ~/build
$ tar xvzf ~jse03/src/alertmanager-0.22.2.linux-amd64.tar.gz
$ cd alertmanager-0.22.2.linux-amd64
$ sudo cp alertmanager /usr/local/bin
$ sudo cp amtool /usr/local/bin

AlertManger 自動起動の設定

$ sudo mkdir -p /var/lib/prometheus/alertmanager
$ sudo chown prometheus:prometheus /var/lib/prometheus/alertmanager
$ sudo vi /etc/systemd/system/prometheus-alert-manager.service

新規作成

[Unit]
Description=Alertmanager for Prometheus

[Service]
Restart=always
User=prometheus
ExecStart=/usr/local/bin/alertmanager --config.file=/etc/prometheus/alertmanager.yml --storage.path=/var/lib/prometheus/alertmanager
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

systemd リロード

$ sudo systemctl daemon-reload

AlertManger 設定

https://knowledge.sakura.ad.jp/11635/

新規作成もしくはソースからコピー

$ sudo cp ~/build/alertmanager-0.22.2.linux-amd64/alertmanager.yml /etc/prometheus/alertmanager.yml
$ sudo vi /etc/prometheus/alertmanager.yml
global:
  resolve_timeout: 10m
  smtp_smarthost: '<SMTPサーバーのホスト>:<ポート>'
  smtp_from: '<From:行で使用するメールアドレス>'
  smtp_auth_username: '<SMTP AUTHで使用するユーザー名>'
  smtp_auth_password: '<SMTP AUTHで使用するパスワード>'
  smtp_require_tls: '<TLSを使用する場合はtrue、使用しない場合はfalse>'
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_intercal: 1h
  receiver: 'default'
receivers:
  - name: <名前>
    email_configs:
    - to: '<メールアドレス>'

途中で読み込んでいるテンプレートは,alertmanagerのGitHubリポジトリ https://github.com/prometheus/alertmanager/tree/master/template にサンプル(default.tmpl)があるので, これらを /etc/prometheus/alertmanager_templates/*.tmpl にコピーして利用すると良い.

AlertManger 起動

$ sudo systemctl --now enable  prometheus-alert-manager

動作確認

http://192.168.100.101:9093

Prometheus 側の設定

/etc/prometheus/prometheus.yml に以下の行を設定する

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - localhost:9093

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-07-13 (火) 14:13:05