#author("2021-07-13T14:12:49+09:00","default:tanak0to","tanak0to")
#author("2021-07-13T14:13:05+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
- 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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS