(六)prometheus+postgres_exporter+grafana监控

1.promentheus介绍

prometheus一款基于时序数据库的开源监控告警系统

(六)prometheus+postgres_exporter+grafana监控_第1张图片

1Prometheus Server: 用于收集和存储时间序列数据。

2Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。

3Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端,所有向promtheus server提供监控数据的程序都可以被称为exporter

4Alertmanager: Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,企业微信,钉钉, slack等。

5Grafana:监控仪表盘,可视化监控数据

6pushgateway: 各个目标主机可上报数据到pushgateway,然后prometheus server统一从pushgateway拉取数据。

postgres_exporter 是一个postgres服务器状态收集组件,服务于prometheus, prometheus 官方提供了mysql的服务器状态的收集组件,postgres的却没有提供,好在拥有万能的githubGitHub - prometheus-community/postgres_exporter: A PostgreSQL metric exporter for Prometheus

prometheus特点

1多维度数据模型

每一个时间序列数据都由metric度量指标名称和它的标签labels键值对集合唯一确定:这个metric度量指标名称指定监控目标系统的测量特征(如:http_requests_total- 接收http请求的总计数)。labels开启了Prometheus的多维数据模型:对于相同的度量名称,通过不同标签列表的结合, 会形成特定的度量维度实例。(例如:所有包含度量名称为/api/trackshttp请求,打上method=POST的标签,则形成了具体的http请求)。这个查询语言在这些度量和标签列表的基础上进行过滤和聚合。改变任何度量上的任何标签值,则会形成新的时间序列图。

2灵活的查询语言(PromQL:可以对采集的metrics指标进行加法,乘法,连接等操作;

3可以直接在本地部署,不依赖其他分布式存储;

4通过基于HTTPpull方式采集时序数据;

5可以通过中间网关pushgateway的方式把时间序列数据推送到prometheus server端;

6可通过服务发现或者静态配置来发现目标服务对象(targets)。

7有多种可视化图像界面,如Grafana等。

8高效的存储,每个采样数据占3.5 bytes左右,300万的时间序列,30s间隔,保留60天,消耗磁盘大概200G

9做高可用,可以对数据做异地备份,联邦集群,部署多套prometheuspushgateway上报数据

2.promentheus安装

#下载prometheus

wget https://github.com/prometheus/prometheus/releases/download/v2.12.0/prometheus-2.12.0.linux-amd64.tar.gz

#解压

tar –xvf prometheus-2.12.0.linux-amd64.tar.gz

#校验文件

./promtool check config prometheus.yml

#配置系统启动文件

vim /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus Server
After=network.target
Documentation=https://prometheus.io/docs/introduction/overview/

[Service]
Type=simple
WorkingDirectory=/disk1/prometheus-2.32.1
ExecStart=/disk1/prometheus-2.32.1/prometheus \
  --config.file=/disk1/prometheus-2.32.1/prometheus.yml \
  --web.read-timeout=5m \
  --web.max-connections=512 \
  --storage.tsdb.retention=15d \
  --storage.tsdb.path=/disk1/prometheus-2.32.1 \
  --query.timeout=2m
Restart=on-failure
[Install]
WantedBy=multi-user.target

#启动

systemctl daemon-reload

systemctl start prometheus

systemctl enable prometheus

systemctl status prometheus

通过浏览器访问prometheus:地址为http://ip:9090

(六)prometheus+postgres_exporter+grafana监控_第2张图片

#配置文件

Prometheus.yml

3. node_exporter安装

在 Prometheus 中负责数据汇报的程序统一叫做 Exporter, 而不同的 Exporter 负责不同的业务。

# 下载主机监控程序node_exporter

wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz


# 解压到指定目录
tar -zxf node_exporter-0.18.1.linux-amd64.tar.gz
cd node_exporter-0.18.1.linux-amd64

#接入Prometheus监控

# exporter集中式配置

修改prometheus参数文件

利用 Prometheus 的 static_configs 来拉取 node_exporter 的数据。打开 prometheus.yml 文件, 在 scrape_configs 中添加如下配置

# 配置prometheus.yml文件
cat >> /ups/app/monitor/prometheus/config/prometheus.yml <<-EOF

  - job_name: 'node_exporter'
    scrape_interval: 1s
    file_sd_configs:
      - files:
        - targets/node/nodes-instances.json
        refresh_interval: 10s
    relabel_configs:
    - action: replace
      source_labels: ['__address__']
      regex: (.*):(.*)
      replacement: $1
      target_label: hostname
    - action: labeldrop
      regex: __meta_filepath
EOF

配置主机服务器列表json文件

Vi targets/node/nodes-instances.json

[
  {
    "targets": [ "192.168.10.181:9100","192.168.10.182:9100", "192.168.10.190:9100","192.168.10.191:9100","192.168.10.192:9100"]
  }
]

# exporter独立配置

每个监控对象独立一个文件配置

修改Prometheus参数配置文件

  - job_name: 'node_exporter'
    scrape_interval: 1s
    file_sd_configs:
      - files:
        - targets/node/*.yml
        refresh_interval: 10s
    relabel_configs:
    - action: replace
      source_labels: ['__address__']
      regex: (.*):(.*)
      replacement: $1
      target_label: hostname
    - action: labeldrop
      regex: __meta_filepath

配置主机服务器实例文件

vi targets/node/nodes1-instances.yml
[
  {
    "targets": ["192.168.10.181:9100"],
    "labels": { }
  }
]

vi targets/node/nodes2-instances.yml
[
  {
    "targets": ["192.168.10.182:9100"],
    "labels": { }
  }
]

# 启动node_exporter

nohup ./node_exporter &

查看http:// ip:9100/metrics

或者单独配置将 node_exporter 加入 prometheus.yml配置中

(六)prometheus+postgres_exporter+grafana监控_第3张图片

prometheus服务器上重载prometheus配置

curl -X POST  http://ip:9090/-/reload

4. postgres_exporter安装

#下载文件

wget https://github.com/wrouesnel/postgres_exporter/blob/v0.8.0/queries.yaml

wget https://github.com/wrouesnel/postgres_exporter/releases/download/v0.8.0/postgres_exporter_v0.8.0_linux-amd64.tar.gz

queries.yaml文件为自定义指标文件,有需要的话可以自定义

#在监控的数据库上执行一下以下命令(不使用数据库超级管理员的权限的时候,注意更改密码)

CREATE USER postgres_exporter PASSWORD 'admin123456';
ALTER USER postgres_exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog;

CREATE SCHEMA postgres_exporter AUTHORIZATION postgres_exporter;

CREATE FUNCTION postgres_exporter.f_select_pg_stat_activity()
RETURNS setof pg_catalog.pg_stat_activity
LANGUAGE sql
SECURITY DEFINER
AS $$
  SELECT * from pg_catalog.pg_stat_activity;
$$;

CREATE FUNCTION postgres_exporter.f_select_pg_stat_replication()
RETURNS setof pg_catalog.pg_stat_replication
LANGUAGE sql
SECURITY DEFINER
AS $$
  SELECT * from pg_catalog.pg_stat_replication;
$$;

CREATE VIEW postgres_exporter.pg_stat_replication
AS
  SELECT * FROM postgres_exporter.f_select_pg_stat_replication();

CREATE VIEW postgres_exporter.pg_stat_activity
AS
  SELECT * FROM postgres_exporter.f_select_pg_stat_activity();

GRANT SELECT ON postgres_exporter.pg_stat_replication TO postgres_exporter;
GRANT SELECT ON postgres_exporter.pg_stat_activity TO postgres_exporter;

#解压安装

tar xf postgres_exporter_v0.8.0_linux-amd64.tar.gz

mv postgres_exporter_v0.8.0_linux-amd64/postgres_exporter /usr/local/bin/

mkdir /etc/postgres_exporter/

mv queries.yaml /etc/postgres_exporter/

chown -R postgres.postgres /etc/postgres_exporter/


#接入Prometheus监控

添加配置Prometheus文件

- job_name: 'postgres_exporter'
    scrape_interval: 1s
    file_sd_configs:
      - files:
        - targets/postgresql/*.yml
        refresh_interval: 10s
    relabel_configs:
    - action: replace
      source_labels: ['__address__']
      regex: (.*):(.*)
      replacement: $1
      target_label: hostname
    - action: labeldrop
      regex: __meta_filepath

添加监控对象

vi targets/postgresql/pg1-instance.yml

[
  {
    "targets": ["localhost:9187"],
    "labels": { "instance": 'postgres:5432' }
  }
]

#创建启动服务

vim /usr/lib/systemd/system/postgres_exporter.service

[Unit]
Description=postgres_exporter
After=network.target
[Service]
Type=simple
User=postgres
Environment="DATA_SOURCE_NAME=postgresql://postgres_exporter:[email protected]:5432/postgres?sslmode=disable"
ExecStart=/usr/local/bin/postgres_exporter --log.level=error --extend.query-path=queries.yaml
Restart=on-failure
[Install]
WantedBy=multi-user.target

#加载启动文件

systemctl daemon-reload


#启动监控命令

systemctl status postgres_exporter

systemctl start postgres_exporter

systemctl stop postgres_exporter

5.Altermanager

实现prometheus的告警,需要通过altermanager这个组件;在prometheus服务端写告警规则,在altermanager组件配置邮箱、企业微信、webhook

AlertmanagerPrometheus是相互分离的两个组件。Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanagersilencinginhibitionaggregation等消息通过电子邮件、dingtalkHipChat发送通知。

Alertmanager处理由例如Prometheus服务器等客户端发来的警报。它负责删除重复数据、分组,并将警报通过路由发送到正确的接收器,比如电子邮件、Slackdingtalk等。Alertmanager还支持groups,silencing和警报抑制的机制。

wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz  -O /data/alertmanager-0.21.0.linux-amd64.tar.gz

tar xvf  /data/alertmanager-0.21.0.linux-amd64.tar.gz -C /data

mv  /data/alertmanager-0.21.0.linux-amd64 /data/alertmanager

cat >  /usr/lib/systemd/system/alertmanager.service  << EOF

[Unit]

Description=https://alertmanager.io

[Service]

Restart=on-failure

ExecStart=/data/alertmanager/alertmanager  --config.file=/data/alertmanager/alertmanager.yml  --log.format=logfmt --log.level=info --storage.path=/data/alertmanager/data

[Install]

WantedBy=multi-user.target

EOF

/data/alertmanager/amtool check-config  alertmanager.yml

systemctl daemon-reload

systemctl restart alertmanager.service

systemctl  enable alertmanager.service

你可能感兴趣的:(监控方案,运维)