大伟 Prometheus_Grafana_Export 部署文档

参考网站:
https://grafana.com/grafana/dashboards
https://grafana.com/grafana/download
https://prometheus.io/
https://github.com/prometheus
https://grafana.com/grafana/dashboards

postres_exporter

https://github.com/prometheus-community/postgres_exporter/releases

prometheus

https://github.com/prometheus/prometheus/releases/download/v2.22.1/prometheus-2.22.1.linux-amd64.tar.gz

node_exporter

https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz

mysql_exporter

https://github.com/prometheus/mysqld_exporter.git

参考进程:
tcp6 0 0 :::3000 ::😗 LISTEN 2671/grafana-server
tcp6 0 0 :::5432 ::😗 LISTEN 1593/postgres
tcp6 0 0 :::9090 ::😗 LISTEN 3385/prometheus
tcp6 0 0 :::9187 ::😗 LISTEN 3061/postgres_expor
tcp6 0 0 :::9100 ::😗 LISTEN 3000/node_exporter

https://prometheus.io/

https://www.cnblogs.com/sunyllove/p/11212835.html Prometheus+Grafana搭建监控系统

Prometheus+Grafana监控

这里可以找到很多exporter https://github.com/prometheus

prometheus

https://github.com/prometheus/prometheus/releases/download/v2.22.1/prometheus-2.22.1.linux-amd64.tar.gz

node_exporter

https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz

https://github.com/prometheus/mysqld_exporter.git

postgres_exporter安装
各个版本的postgres_exporter https://github.com/wrouesnel/postgres_exporter/releases
以linux系统为例,下载编译好的二进制包,解压使用:

安装prometheus
groupadd prometheus
useradd -g prometheus -m -d /opt/prometheus/ -s /sbin/nologin prometheus
cd /opt/soft/prometheus_grafana
tar xzf prometheus-2.22.1.linux-amd64.tar.gz -C /opt/
cd /opt/prometheus-2.22.1.linux-amd64 
安装node_export
# 运行用户添加
groupadd prometheus
useradd -g prometheus -m -d /usr/local/node_exporter/ -s /sbin/nologin prometheus_node 
# 解压到指定目录并删除下载文件
tar -zxf node_exporter-1.0.1.linux-amd64.tar.gz 
mv node_exporter-1.0.1.linux-amd64 /usr/local/ 
ln -sv /usr/local/node_exporter-1.0.1.linux-amd64 /usr/local/node_exporter 
# 系统服务配置 node_exporter 
touch /usr/lib/systemd/system/node_exporter.service 
chown prometheus_node:prometheus /usr/lib/systemd/system/node_exporter.service 
chown -R prometheus_node:prometheus /usr/local/node_exporter* 
cat > /usr/lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
User=prometheus_node
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
mv /usr/local/node_exporter/node_exporter-1.0.1.linux-amd64 /usr/local/node_exporteraaa
rm -fr /usr/local/node_exporter
mv /usr/local/node_exporteraaa /usr/local/node_exporter
#启动 node_exporter 服务并设置开机启动
systemctl daemon-reload
systemctl enable node_exporter.service
systemctl start node_exporter.service
systemctl status node_exporter.service
systemctl restart node_exporter.service
systemctl start node_exporter.service
systemctl stop node_exporter.service

node_exporter启动成功后, 你就可以通过如下api看到你的监控数据了

http://1.1.1.55:9100/metrics

安装postgres_exporter,监控pg:

# 解压
tar zxvf postgres_exporter-0.9.0.linux-amd64.tar.gz
mv postgres_exporter-0.9.0.linux-amd64/postgres_exporter /usr/local/
# 添加服务
cat > /usr/lib/systemd/system/pg_exporter.service <<EOF
[Unit]
Description=postgres_exporter
After=network.target
[Service]
Type=simple
User=prometheus_node
ExecStart=/usr/local/postgres_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 启动
systemctl start   pg_exporter.service 
systemctl status pg_exporter.service 
systemctl enable pg_exporter.service 

端口: 9187

安装Grafana

https://grafana.com/grafana/download

Red Hat, CentOS, RHEL, and Fedora(64 Bit)SHA256: eea49ecd6faec392aaec9073c5b74dc09cb0a71e8d8ff0e3a8d23942c8cfd605

wget https://dl.grafana.com/oss/release/grafana-7.3.2-1.x86_64.rpm
sudo yum install grafana-7.3.2-1.x86_64.rpm

设置prometheus系统服务,并配置开机启动

touch /usr/lib/systemd/system/prometheus.service
chown prometheus:prometheus /usr/lib/systemd/system/prometheus.service
vim /usr/lib/systemd/system/prometheus.service

prometheus.service 的内容如下:

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

[Service]
Type=simple
User=prometheus
# --storage.tsdb.path是可选项,默认数据目录在运行目录的./dada目录中
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --web.enable-lifecycle --storage.tsdb.path=/opt/prometheus/data --storage.tsdb.retention=60d
Restart=on-failure

[Install]
WantedBy=multi-user.target
  • –config.file – 指明prometheus的配置文件路径
  • –web.enable-lifecycle – 指明prometheus配置更改后可以进行热加载
  • –storage.tsdb.path – 指明监控数据存储路径
  • –storage.tsdb.retention --指明数据保留时间
cd /opt/prometheus
mv .* /opt/prometheus-2.22.1.linux-amd64/
cd ..
rm -fr prometheus
mv prometheus-2.22.1.linux-amd64/ prometheus
cd /opt/prometheus
rm -fr data
mkdir data 
chmod 777 data/

设置开机启动

systemctl daemon-reload
systemctl enable prometheus.service
systemctl status prometheus.service
systemctl start prometheus.service

在启动prometheus时加上参数 web.enable-lifecycle , 可以启用配置的热加载, 配置修改后, 热加载配置:

curl -X POST  http://localhost:9090/-/reload
为了更好的展示, 接下来我们将这个api 配置到 prometheus server中, 并通过grafana进行展示.
http://1.1.1.55:9090/targets


### 配置node_exporter列表:
cat > /opt/prometheus/sd_cfg/Linux.yml <<EOF
- targets: ['1.1.1.55:9100']
  labels:
    name: pg55_node
- targets: ['1.1.1.56:9100']
  labels:
    name: pg56_node
- targets: ['1.1.1.57:9100']
  labels:
    name: pg57_node
- targets: ['1.1.1.58:9100']
  labels:
    name: pg58_node
EOF
### 配置postgres_exporter列表:
cat > /opt/prometheus/sd_cfg/Pg.yml <<EOF
- targets: ['1.1.1.55:9187']
  labels:
    name: pg55_pg
- targets: ['1.1.1.56:9187']
  labels:
    name: pg56_pg
- targets: ['1.1.1.57:9187']
  labels:
    name: pg57_pg
- targets: ['1.1.1.58:9187']
  labels:
    name: pg58_pg
EOF

### 加载列表到到server服务:
cat >> /opt/prometheus/prometheus.yml <<EOF

  - job_name: 'Linux'
    file_sd_configs:
    - files: ['/opt/prometheus/sd_cfg/Linux.yml']
      refresh_interval: 5s
EOF
cat >> /opt/prometheus/prometheus.yml <<EOF

  - job_name: 'Pg'
    file_sd_configs:
    - files: ['/opt/prometheus/sd_cfg/Pg.yml']
      refresh_interval: 5s
EOF

### 重载prometheus配置
curl -X POST  http://localhost:9090/-/reload


在文件 vi /opt/prometheus/sd_cfg/Linux.yml 中写入如下内容

- targets: ['1.1.1.21:9100']
  labels:
    name: hn_wei21

将 node_exporter 加入 /opt/prometheus-2.22.1.linux-amd64/prometheus.yml配置中

  - job_name: 'Linux'
    file_sd_configs:
    - files: ['/opt/prometheus/sd_cfg/Linux.yml']
      refresh_interval: 5s

如果你按照上面的方式配置了, 但是使用工具 promtool检测prometheus配置时,没有通过, 那肯定是你写的语法有问题, 不符合yml格式. 请仔细检查下. 如有疑问, 可以在下方评论区留言.

这样做的好处是, 方便以后配置监控自动化, 规范化, 将每一类的监控放到自己的配置文件中, 方便维护.

当然, 如果你的服务器少, 要监控的组件少的话, 你也可以将配置都写入prometheus的主配置文件prometheus.yml中, 如:.

  - job_name: 'Linux'
    static_configs:    
    targets: ['http://10.199.111.110:9100']    
    labels:
      group: 'client-node-exporter'

重载prometheus配置

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

冷水泡茶

茶无上品, 适口为珍, 学习最重要的是找到适合自己的方法, 然后坚持下去, and so on … (运维技术交流: 618354452)

随笔 - 62 文章 - 19 评论 - 21

Prometheus+Grafana监控

什么是Prometheus?

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。
Prometheus目前在开源社区相当活跃。
Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。

Prometheus的特点

  • 多维度数据模型。
  • 灵活的查询语言。
  • 不依赖分布式存储,单个服务器节点是自主的。
  • 通过基于HTTP的pull方式采集时序数据。
  • 可以通过中间网关进行时序列数据推送。
  • 通过服务发现或者静态配置来发现目标服务对象。
  • 支持多种多样的图表和界面展示,比如Grafana等。

Prometheus监控基本原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。

img

Prometheus服务过程

Prometheus Daemon 负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。
Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。
PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。
Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

Prometheus 三大套件

  • Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
  • Alertmanager 警告管理器,用来进行报警。
  • Push Gateway 支持临时性Job主动推送指标的中间网关。

1. 安装 Prometheus Server

1.1 运行用户创建

groupadd prometheus
useradd -g prometheus -m -d /opt/prometheus/ -s /sbin/nologin prometheus

1.2 prometheus server安装

wget http://10.200.77.3:90/Monitor/prometheus/prometheus-2.14.0.linux-amd64.tar.gz
tar xzf prometheus-2.14.0.linux-amd64.tar.gz -C /opt/
cd /opt/prometheus-2.14.0.linux-amd64 

1.3 prometheus配置语法校验

建议每次修改prometheus配置之后, 都进行语法校验, 以免导致 prometheus server无法启动.

./promtool check config prometheus.yml

1.4 启动Prometheus

此时采用默认配置启动 prometheus server 看下界面, 稍后介绍如何监控Linux 服务器.

./prometheus --config.file=prometheus.yml

1.5 通过浏览器访问prometheus

img

发现 target 中只有 prometheus server, 因为我们还没有加入其他监控, 下面进行介绍, 后续博文中还将陆续介绍如何监控 redis, RabbitMQ, Kafka, nginx, java等常见服务.

img

prometheus默认配置:

[复制代码](javascript:void(0)😉

# 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'
    scrape_interval: 10s
    static_configs:
    - targets: ['localhost:9090']

[复制代码](javascript:void(0)😉

1.6 设置prometheus系统服务,并配置开机启动

touch /usr/lib/systemd/system/prometheus.service
chown prometheus:prometheus /usr/lib/systemd/system/prometheus.service
vim /usr/lib/systemd/system/prometheus.service

将如下配置写入prometheus.servie

[复制代码](javascript:void(0)😉

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

[Service]
Type=simple
User=prometheus
# --storage.tsdb.path是可选项,默认数据目录在运行目录的./dada目录中
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --web.enable-lifecycle --storage.tsdb.path=/opt/prometheus/data --storage.tsdb.retention=60d
Restart=on-failure

[Install]
WantedBy=multi-user.target

[复制代码](javascript:void(0)😉

Prometheus启动参数说明

  • –config.file – 指明prometheus的配置文件路径
  • –web.enable-lifecycle – 指明prometheus配置更改后可以进行热加载
  • –storage.tsdb.path – 指明监控数据存储路径
  • –storage.tsdb.retention --指明数据保留时间

设置开机启动

systemctl daemon-reload
systemctl enable prometheus.service
systemctl status prometheus.service
systemctl restart prometheus.service

说明: prometheus在2.0之后默认的热加载配置没有开启, 配置修改后, 需要重启prometheus server才能生效, 这对于生产环境的监控是不可容忍的, 所以我们需要开启prometheus server的配置热加载功能.

在启动prometheus时加上参数 web.enable-lifecycle , 可以启用配置的热加载, 配置修改后, 热加载配置:

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

2. Prometheus 配置监控其他Linux主机

2.1 node_exporter安装配置

[复制代码](javascript:void(0)😉

# 运行用户添加
groupadd prometheus
useradd -g prometheus -m -d /usr/local/node_exporter/ -s /sbin/nologin prometheus 
# 下载node_serverwget 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 mv node_exporter-0.18.1.linux-amd64 /usr/local/ ln -sv /usr/local/node_exporter-0.18.1.linux-amd64 /usr/local/node_exporter rm -f node_exporter-0.18.1.linux-amd64.tar.gz# 系统服务配置 node_exporter touch /usr/lib/systemd/system/node_exporter.service chown prometheus:prometheus /usr/lib/systemd/system/node_exporter.service chown -R prometheus:prometheus /usr/local/node_exporter* vim /usr/lib/systemd/system/node_exporter.service

[复制代码](javascript:void(0)😉

在node_exporter.service中加入如下代码:

[复制代码](javascript:void(0)😉

[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

[复制代码](javascript:void(0)😉

启动 node_exporter 服务并设置开机启动

[复制代码](javascript:void(0)😉

systemctl daemon-reload
systemctl enable node_exporter.service
systemctl start node_exporter.service
systemctl status node_exporter.service
systemctl restart node_exporter.service
systemctl start node_exporter.service
systemctl stop node_exporter.service

[复制代码](javascript:void(0)😉

node_exporter启动成功后, 你就可以通过如下api看到你的监控数据了(将下面的node_exporter_server_ip替换成你的node_exporter的IP地址, 放到浏览器中访问就可以了 ).

http://node_exporter_server_ip:9100/metrics

为了更好的展示, 接下来我们将这个api 配置到 prometheus server中, 并通过grafana进行展示.

将 node_exporter 加入 prometheus.yml配置中

  - job_name: 'Linux'
    file_sd_configs:
    - files: ['/opt/prometheus/sd_cfg/Linux.yml']
      refresh_interval: 5s

并在文件/opt/prometheus/sd_cfg/Linux.yml中写入如下内容

- targets: ['IP地址:9100']
  labels:
    name: Linux-node1[这里建议给每个主机打个有意义的标签,方便识别.]

如果你按照上面的方式配置了, 但是使用工具 promtool检测prometheus配置时,没有通过, 那肯定是你写的语法有问题, 不符合yml格式. 请仔细检查下. 如有疑问, 可以在下方评论区留言.

这样做的好处是, 方便以后配置监控自动化, 规范化, 将每一类的监控放到自己的配置文件中, 方便维护.

当然, 如果你的服务器少, 要监控的组件少的话, 你也可以将配置都写入prometheus的主配置文件prometheus.yml中, 如:.

[复制代码](javascript:void(0)😉

# 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'
    scrape_interval: 10s
    static_configs:
    - targets: ['localhost:9090']

  - job_name: 'Linux'
    static_configs:    targets: ['http://10.199.111.110:9100']    labels:
      group: 'client-node-exporter'

[复制代码](javascript:void(0)😉

重载prometheus配置

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

img

3 数据展示Grafana安装配置

下载地址: https://grafana.com/grafana/download

wget https://dl.grafana.com/oss/release/grafana-6.5.1-1.x86_64.rpm
sudo yum localinstall grafana-6.5.1-1.x86_64.rpm

granafa默认端口为3000,可以在浏览器中输入http://localhost:3000/
granafa首次登录账户名和密码admin/admin,可以修改
配置数据源Data sources->Add data source -> Prometheus,输入prometheus数据源的信息,主要是输入name和url

img

添加 Dashboard -> New Dashboard -> Import Dashboard -> 输入11074,导入Linux监控模板. 并配置数据源为Prometheus,即上一步中的name
配置完保存后即可看到逼格非常高的系统主机节点监控信息,包括系统运行时间, 内存和CPU的配置, CPU、内存、磁盘、网络流量等信息, 以及磁盘IO、CPU温度等信息。

img

img

参考资料:

  • 官网地址:https://prometheus.io/
  • GitHub: https://github.com/prometheus
  • 官方文档中文版: https://github.com/Alrights/prometheus
  • 官方监控agent列表:https://prometheus.io/docs/instrumenting/exporters/

官方监控agent列表:

https://prometheus.io/docs/instrumenting/exporters/

postgresql exporter

https://github.com/wrouesnel/postgres_exporter

mysql exporter

https://github.com/prometheus/mysqld_exporter

node exporter

https://github.com/prometheus/node_exporter

https://github.com/prometheus/prometheus/releases/download

这里可以找到很多exporter https://github.com/prometheus

这里可以找到很多dashboard

https://grafana.com/grafana/dashboards

Grafana官方和社区提供的dashboard

详见:https://grafana.com/grafana/dashboards 可以在左侧配置筛选条件,非常强大。

人们永远没有足够的时间把它做好,但永远有足够的时间重新来过。 可是,因为并不是总有机会重做一遍,你必须做得更好,换句话说, 人们永远没有足够的时间去考虑到底是不是想要它,但永远有足够的时间去为之后悔。 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 浅掘千口井,不如深挖一口井!当知识支撑不了野心时,那就静下心来学习吧!运维技术交流QQ群:618354452

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值