#author("2021-07-13T14:12:49+09:00","default:tanak0to","tanak0to") RIGHT: [[フリーソフトウェアのコンパイル]] * 参考 [#g1888705] https://knowledge.sakura.ad.jp/11633/ https://qiita.com/sugitak/items/ff8f5ad845283c5915d2 https://qiita.com/nekoneck/items/fad926b5ee58ad65f47c * サーバ環境 [#r21ecae8] -ubuntu 20.04 LTS -- 1 CPU -- 20GB HDD -- 4GB Mem -- 192.168.100.101 * サーバインストール [#me2ab5c0] $ 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 ** ユーザと必要なディレクトリの作成 [#ff1903ef] $ 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 ** サーバの自動起動設定 [#ra2f72f6] $ 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 ** サーバの設定 [#ia122ec6] /etc/prometheus/prometheus.yml を編集する global: scrape_interval: 60s # 1分ごとにデータ取得 evaluation_interval: 60s # 1分ごとに評価 ** 監視対象は以下で設定する. [#h5c3a585] 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>'] ** サーバ起動 [#t8d2d1a7] $ sudo systemctl start prometheus ** ブラウザでアクセス [#z401d726] http://192.168.100.101:9090/ ** サーバのアクセス制限 [#raf702b0] 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 ---- * クライアントエージェントインストール [#w791b867] とりあえずターゲットは 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/ ** ユーザ作成 [#z7e2e578] $ sudo useradd -U -s /sbin/nologin -M -d / prometheus ** エージェントの自動起動設定 [#x8569057] $ 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) [#o786a496] $ sudo systemctl start prometheus-node-exporter ** サーバに監視追加 [#w48745a0] /etc/prometheus/prometheus.yml を編集する # - job_name: '<ジョブ名>' # static_configs: # - tagets: ['<対象のホスト名>:<ポート番号9100>'] - job_name: 'mail' static_configs: - targets: ['192.168.1.2:9100'] ** サーバ再起動 [#ub59d3d7] $ sudo systemctl restart prometheus ----- * Grafana で可視化 [#m8d70939] ** インストール [#h4ce74f6] 参考 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 インストールされるパッケージ内容 - Installs binary to /usr/sbin/grafana-server - Installs Init.d script to /etc/init.d/grafana-server - Creates default file (environment vars) to /etc/default/grafana-server - Installs configuration file to /etc/grafana/grafana.ini - Installs systemd service (if systemd is available) name grafana-server.service - The default configuration sets the log file at /var/log/grafana/grafana.log - The default configuration specifies a SQLite3 db at /var/lib/grafana/grafana.db - Installs HTML/JS/CSS and other Grafana files at /usr/share/grafana ** サーバ起動 [#x90c56ba] $ sudo systemctl daemon-reload $ sudo systemctl start grafana-server $ sudo systemctl status grafana-server $ sudo systemctl enable grafana-server.service TCP ポート 3000番でサーバが立ち上がる. パスワードはいつものサーバ用の物をつける * Grafana 設定 [#keb63f6e] Web コンソールにログイン後 ** データソース追加 [#x1baf976] 左側歯車アイコン > [Data Sources] > [Add data sources]> Prometheus > [Select] - URL: http://localhost:9090/ - Access: Server(default) > [Save & Test] ** ダッシュボード作成 [#p5b55222] 左側 + アイコン > [Dashboard] ---- * Alertmanager インストール [#v83dba41] ** Prometheus に Alert ルール追加 [#ee50331f] /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 のインストール [#vb375e37] $ 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 自動起動の設定 [#s1005aa0] $ 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 設定 [#r46a8ddd] 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 起動 [#wbc55f58] $ sudo systemctl --now enable prometheus-alert-manager *** 動作確認 [#qa95c9bc] http://192.168.100.101:9093 ** Prometheus 側の設定 [#z5f826b1] /etc/prometheus/prometheus.yml に以下の行を設定する alerting: alertmanagers: - static_configs: - targets: - localhost:9093