使用Prometheus / Loki / Grafana来监视指标和日志

首先

由于对监控工具成本的重新评估,公司内部正在考虑和引入使用开源软件的监控工具。为了深入理解,首先在验证环境中进行实际构建,以增加个人的理解。

我想做的事情

使用监控服务器(Grafana仪表盘)可视化以下监控目标服务器的指标和日志。

    • CPU使用率

 

    • メモリ使用率

 

    • sshdプロセスの死活監視

 

    • /var/log/messagesのログ

 

    /var/log/crondのログ

简略图

image.png

项目的结果

在这次验证中,我们使用Grafana创建了下图所示的日志和度量指标的仪表盘,使其可以进行可视化。

image.png

确认术语

监视的三大支柱

日志

    サービスやアプリケーションから吐き出される特定のコードブロックが実行されたときにシステムが生成する単なるテキスト行

度量衡系统

    定期的にグループ化または収集された測定値の集合。特定の期間のデータの集合

追踪 (zhuī

    マイクロサービスエコシステムの異なるコンポーネント間のイベント(またはトランザクション)の因果連鎖のサンプル。命令の実行を順番にたどって各段階の状態・状況を確認する作業をトレースという。

请参考以下链接:

https://newrelic.com/jp/blog/how-to-relic/metrics-events-logs-and-traces

https://e-words.jp/w/%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9.html

工具

普罗米修斯

    サービスやアプリケーションのメトリクスを収集し、可視化することができるツール

洛基

    ログ収集およびクエリシステム

Grafana = 图纳

    データの可視化ツール

节点导出器

    • メトリクスを収集するためのツール

 

    転送はpull型で監視サーバ側の設定でprometheusから被監視サーバのNoe Exporterの情報を取得する設定を入れる

出口程序

    • プロセスの状態を収集するためのツール

 

    転送はpull型で監視サーバ側の設定でprometheusから被監視サーバのProcess Exporterの情報を取得する設定を入れる

Promtail 是一个日志收集和传输工具。

    • ログを転送するツール

 

    転送はpush型で被監視サーバから監視サーバに向けてログを転送する設定をいれる

组成

监视服务器和被监视服务器将按照以下配置进行创建。

用途IPインスタンス情報導入ツール被監視サーバ172.16.10.125t2.small・Node Exporter
・Process Exporter
・Promtail監視サーバ172.16.10.106t2.large・Grafana
・Loki
・Prometheus

设定步骤

首先

为了避免管理变得复杂,可以按照以下目录结构进行源代码的下载和部署。

# ソースのダウンロード用ディレクトリ
# e.g. /usr/local/src/prometheus
/usr/local/src/[ツール名]

# バイナリの配置先
/usr/bin

# コンフィグの格納用ディレクトリ
# e.g. /etc/prometheus
/etc/[ツール名]

被监视服务器设置

在被监视的服务器上(172.16.10.125)进行以下三项设置。

    • node exporter

 

    • process exporter

 

    promtail

安装Node Exporter

请在以下网址下载并安装最新版本:
https://github.com/prometheus/node_exporter/releases

# ソースダウンロード用ディレクトリの作成
$ mkdir /usr/local/src/prometheus
# ソースダウンロード用ディレクトリに移動
$ cd /usr/local/src/prometheus
# ソースの圧縮ファイルをダウンロード
$ wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz
# 圧縮ファイルの解凍
$ tar zxvf node_exporter-0.16.0.linux-amd64.tar.gz
# /usr/binに格納
$ cp -r node_exporter-0.16.0.linux-amd64 /usr/bin

创建启动脚本

vi /usr/lib/systemd/system/prometheus-node-exporter.service
[Unit]
Description=Node Exporter
Documentation=https://github.com/prometheus/node_exporter

[Service]
Type=simple
ExecStart=/usr/bin/prometheus/node_exporter/node_exporter $OPTIONS
Restart=always

[Install]
WantedBy=multi-user.target

启动和运行测试

# デーモンのリロード
$ systemctl daemon-reload
# 自動起動設定
$ systemctl enable prometheus-node-exporter.service
# 起動
$ systemctl start prometheus-node-exporter.service
# ステータス確認
$ systemctl status prometheus-node-exporter.service
image.png

尝试访问node exporter的API。

curl localhost:9100/metrics
image.png

安装进程导出器。

请从下方链接下载最新版本
https://github.com/ncabatoff/process-exporter/releases/tag/v0.7.10/process-exporter-0.7.10.linux-386.tar.gz

# ソースダウンロード用ディレクトリの作成
$ mkdir /usr/local/src/process-exporter
# ソースダウンロード用ディレクトリに移動
$ cd /usr/local/src/process-exporter
# ソースの圧縮ファイルをダウンロード
$ wget https://github.com/ncabatoff/process-exporter/releases/download/v0.7.10/process-exporter-0.7.10.linux-amd64.tar.gz
# 圧縮ファイルの解凍
$ tar zxvf process-exporter-0.7.10.linux-amd64.tar.gz
# process exporter本体を自動起動するソース配下へコピー
$ cp -r /usr/local/src/process-exporter /usr/bin

# process exporter設定ファイルの配置
## コンフィグの格納用ディレクトリ作成
$ mkdir /etc/process-exporter
## コンフィグの作成
$ vi /etc/process-exporter/process-exporterconfig.yml

将下列脚本写入/etc/process-exporter/process-exporterconfig.yml文件中。

# comm is the second field of /proc/<pid>/stat minus parens.
# It is the base executable name, truncated at 15 chars.  
# It cannot be modified by the program, unlike exe.
process_names:
  - cmdline:
    - .+

制作启动脚本

[Unit]
Description=Process Exporter
Documentation=https://github.com/ncabatoff/process-exporter

[Service]
Type=simple
ExecStart=/usr/bin/process-exporter \
  -config.path /etc/process-exporter/config.yml

[Install]
WantedBy=multi-user.target

开始运行和确认操作

# デーモンのリロード
$ systemctl daemon-reload
# 自動起動設定
$ systemctl enable process-exporter.service
# 起動
$ systemctl start process-exporter.service
# ステータス確認
$ systemctl status process-exporter.service
image.png

尝试调用进程导出器的API

curl localhost:9256/metrics
image.png

安装promtail。

# ソースダウンロード用ディレクトリの作成
$ mkdir /usr/local/src/promtail
# ソースダウンロード用ディレクトリに移動
$ cd /usr/local/src/promtail
$ ソースの圧縮ファイルをダウンロード
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.4.1/promtail-linux-amd64.zip"
# 圧縮ファイルの解凍
$ unzip "promtail-linux-amd64.zip"
# 実行権限を付与
$ chmod a+x "promtail-linux-amd64.zip"
# /usr/binにコピー
$ cp -r /usr/local/src/promtail/promtail-linux-amd64 /usr/bin

下载config文件

# コンフィグ格納用ディレクトリの作成
$ mkdir /etc/promtail
# コンフィグ格納用ディレクトリに移動
$ cd /etc/promtail
# コンフィグのダウンロード
$ wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml

修改配置

    • localhostから監視サーバへ送信先を変更

 

    /var/log/messagesと/var/log/crondのログを収集するように設定
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yam

clients:
  - url: http://172.16.10.106:3100/loki/api/v1/push
scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/messages

- job_name: cron
  static_configs:
  - targets:
      - localhost
    labels:
      job: cronlogs
      __path__: /var/log/cron

创建启动脚本

[Unit]
Description=Promtail
Documentation=https://github.com/grafana/loki/releases/

[Service]
Type=simple
ExecStart=/usr/bin/promtail-linux-amd64 \
  --config.file=/etc/promtail/promtail-local-config.yaml

[Install]
WantedBy=multi-user.target

启动和操作确认

# デーモンの再起動
$ systemctl daemon-reload
# 自動起動設定
$ systemctl enable promtail.service
# 起動
$ systemctl start promtail.service
# ステータス確認
$ systemctl status promtail.service
image.png

尝试从本地向Promtail发出API请求

curl localhost:9080/targets
image.png

请使用浏览器访问 http://[全球IP]:9080/targets,确认Promtail是否正常显示。
请确保在安全组中开放了9080端口。

image.png

在使用Amazon Linux 2023时遇到的问题

    • 今回、/var/log/messagesと/var/log/cronのログを連携したいが、amazon linux 2023にはrsyslogとchronyが標準で入っていないため、別途入れる必要があった。

 

    cronieインストール
$ dnf -y install cronie
# /var/log/cronのファイルを生成する
$ crontab -e

安装rsyslog

$ yum install -y rsyslog
$ systemctl enable rsyslog.service
$ systemctl start rsyslog.service

监视服务器

进行以下三个工具的安装

    • Prometheus

 

    • Loki

 

    Grafana

Prometheus的安装

wget https://github.com/prometheus/prometheus/releases/download/v2.25.2/prometheus-2.25.2.linux-amd64.tar.gz
tar zxvf prometheus-2.25.2.linux-amd64.tar.gz
cd prometheus-2.25.2.linux-amd64
./prometheus

#prometheus本体を自動起動するソース配下へコピー
cp -r ./prometheus /usr/bin

#prometheus設定ファイルの配置
mkdir /etc/prometheus
cd /etc/prometheus

## wget https://raw.githubusercontent.com/prometheus/prometheus/master/documentation/examples/prometheus.yml
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

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

    static_configs:
      - targets: ["localhost:9090"]
  - job_name: 'node-exporter'
    static_configs:
      - targets: ["172.16.10.125:9100"]
  - job_name: 'process-exporter'
    static_configs:
      - targets: ["172.16.10.125:9256"]

以下是用于自动启动的prometheus.service的内容

[Unit]
Description=Prometheus - Monitoring system and time series database
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \

[Install]
WantedBy=multi-user.target

启动和操作确认

# デーモンのリロード
$ systemctl daemon-reload
# 自動起動設定
$ systemctl enable prometheus.service
# 起動
$ systemctl start prometheus.service
image.png

洛基的安装

$ mkdir /usr/local/src/loki
$ cd /usr/loca/src/loki
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.8.3/loki-linux-amd64.zip"
$ unzip "loki-linux-amd64.zip"
$ chmod a+x "loki-linux-amd64"
$ cp -r loki-linux-amd64 /usr/bin
$ mkdir /etc/loki
$ cd /etc/loki
$ wget https://raw.githubusercontent.com/grafana/loki/main/cmd/loki/loki-local-config.yaml
$ ./loki-linux-amd64 -config.file=/etc/loki/loki-local-config.yaml

请参考以下链接:https://github.com/grafana/loki/releases/。

[Unit]
Description=Loki
Documentation=https://github.com/grafana/loki/releases/

[Service]
Type=simple
ExecStart=/usr/bin/loki-linux-amd64 \
  -config.file=/etc/loki/loki-local-config.yaml

[Install]
WantedBy=multi-user.target

启动和操作确认

# デーモンのリロード
$ systemctl daemon-reload
# 自動起動設定
$ systemctl enable loki.service
# 起動
$ systemctl start loki.service
    • 実行完了後、ブラウザから[IP]:3100/metricsにアクセスすると下記画面が表示されることを確認(セキュリティグループで3100番ポートを開けること)

 

    • 実行後はずらずら情報が出力されるが10分ほど待っても終わらなかったためctrl+cで強制終了した。

 

    プロセスも立ち上がっており、ブラウザからもアクセスが確認できたためとりあえずよさそう

确认进程

ps -ax | grep loki
スクリーンショット 2023-07-23 15.04.14.png
スクリーンショット 2023-07-23 14.56.31.png

安装Grafana

# Grafanaリポジトリを追加
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
# Grafanaインストール、起動
 yum install grafana
 systemctl start grafana-server
image.png
image.png
image.png

仪表盘设置

中央处理器利用率

获取指标

点击菜单栏中的“探索”选项。

数据源:Prometheus
度量:node_cpu_seconds_total
标签过滤器:mode != 空闲
速率:范围1分钟

image.png
image.png

将其添加到仪表板

在“添加到仪表盘”中选择目标的仪表盘并添加。

image.png
image.png

内存使用率

获取度量指标

选择菜单>探索

从右上角的模式切换中选择“Code”。

(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
image.png

参照这篇文章并进行内存负载测试能更直观地了解其运行情况。
https://qiita.com/keita0322/items/8fba88debe66fa8d2b39

将其添加到仪表盘上

在“Add to dashboard”中选择并添加目标的仪表板。

image.png

选择「…」后选择“编辑”,将标题更改为任意名称,将标准选项更改为单位为“百分比(0-100)”,然后保存。

image.png
image.png

ssh连接进程的生存监控

选择菜单中的“探索”选项。

数据源:Prometheus
指标:nodeprocess_namegroup_num_procs
标签过滤器:groupname =~ .*sshd.*

image.png

将其添加到仪表盘上。

在Add to dashboard中选择Target的仪表板并添加
从「…」中选择Edit,更改Title为任意的名字,然后保存。

image.png
image.png

/var/log/messages 的日志

数据源:Prometheus
标签过滤器:文件名 = /var/log/messages

image.png

将其添加到仪表盘上。

在Add to dashboard中选择Target的仪表板并添加。
从”…”菜单中选择Edit,将Title更改为任意名称,并保存。

image.png
image.png

/var/log/crond的日志

数据源:Prometheus
标签过滤器:文件名 = /var/log/crond

image.png

将其添加至仪表板上。

在”Add to dashboard”上选择”Target的仪表板”并添加。
在”…”中选择”Edit”,将标题更改为任意名称,并保存。

image.png
image.png

仪表盘微调整

image.png

个人感受

这次是我第一次搭建监控基础设施,虽然参考了官方文档和其他文章,但好在最终能够成功显示仪表板。
Grafana的操作很直观,不需要太多查找,只需简单点击就能完成设置,这让我感到非常有趣!
未来,我还想验证一些警报协作等功能,并将其引入公司的基础设施中。

非常感谢您一直阅读到最后!

广告
将在 10 秒后关闭
bannerAds