Promethus(普罗米修斯)适合k8s和docker的监控系统
基本原理
Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。
它的服务过程是这样的Prometheus daemon负责定时去目标上抓取metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。
Prometheus:支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。
Alertmanager:是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。
PushGateway:这个组件是支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据
架构图
如上图,通过 mysql_exporter 获取 MySQL 的监控数据,通过 node_exporter 获得 Linux 服务器的监控数据。将获得的监控数据传到 Prometheus 中,最终通过 Grafana 展示出来
监控exporter
Prometheus为了支持各种中间件以及第三方的监控提供了exporter,大家可以把它理解成监控适配器,将不同指标类型和格式的数据统一转化为Prometheus能够识别的指标类型。
例如Node exporter主要通过读取Linux的/proc以及/sys目录下的系统文件获取操作系统运行状态,reids exporter通过Reids命令行获取指标,mysql exporter通过读取数据库监控表获取MySQL的性能数据。他们将这些异构的数据转化为标准的Prometheus格式,并提供HTTP查询接口。
安装
普罗米修斯下载网址 安装到服务器上官网提供的是二进制版,解压就能用,不需要编译。选择Linux版本
#下载完解压
tar xvfz prometheus-*.tar.gz
cd prometheus-*
prometheus.yml 配置解释
# my global config 控制着全局配置
global:
# 默认情况下,每15s拉取一次目标采样点数据。
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
# 每15秒评估一次规则。默认值为每1分钟。
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:
# job名称会增加到拉取到的所有采样点上,同时还有一个instance目标服务的host:port标签也会增加到采样点上
# 每添加一个exprter就添加一个job
- job_name: 'prometheus'
# 覆盖global的采样点,拉取时间间隔5s
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
启动服务
# 启动服务
[/usr/local/prometheus]# ./prometheus --config.file=prometheus.yml
# 指定配置文件
--config.file="prometheus.yml"
# 默认指定监听地址端口,可修改端口
--web.listen-address="0.0.0.0:9090"
# 最大连接数
--web.max-connections=512
# tsdb数据存储的目录,默认当前data/
--storage.tsdb.path="data/"
# premetheus 存储数据的时间,默认保存15天
--storage.tsdb.retention=15d
# 通过命令热加载无需重启 curl -XPOST 192.168.2.45:9090/-/reload
--web.enable-lifecycle
# 可以启用 TLS 或 身份验证 的配置文件的路径
--web.config.file=""
启动选项了解:./prometheus --help
访问服务
查看监控的属性
以图的方式查看监控的属性
查询指令:promhttp_metric_handler_requests_total
客户端安装node_exporter监控适配器
Node exporter主要通过读取Linux的/proc以及/sys目录下的系统文件获取操作系统运行状态。
- 下载网址 选择Linux版本
- 安装
# tar xf node_exporter-1.1.2.linux-amd64.tar.gz -C /usr/local/
# mv node_exporter-1.1.2.linux-amd64/ node_exporter
- 开启服务
# 直接启动
[root@VM_2-44 /usr/local/node_exporter]# ./node_exporter &
# & 表示开启后运行在后台
# 启动后会监听9100端口
# 添加为服务方式启动
# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 启动node_exporter
systemctl daemon-reload
systemctl start node_exporter
- 添加配置项-服务端配置文件添加监控项 即:prometheus.yml
在scrape_configs:区域添加如下配置
- job_name: 'linux'
static_configs:
- targets: ['ip:9100','192.168.1.2:9100'] # 多个用,分开
- 重启普罗米修斯
./prometheus --config.file=prometheus.yml
或者 systemctl restart prometheus.service
打开普罗米修斯自带的监控页面,Status -> Targets 查看:
客户端安装mysql_exporter监控适配器
下载位置同上
需要添加配置文件 详情见GitHub网站
(base) wuliuqi@wuliuqi:~/Documents/mysqld_exporter$ vim .my.cnf
(base) wuliuqi@wuliuqi:~/Documents/mysqld_exporter$ cat .my.cnf
[client]
user=root
password=123456789
- 启动mysqld-exporte
# 直接启动
(base) wuliuqi@wuliuqi:~/Documents/mysqld_exporter$ ./mysqld_exporter --config.my-cnf=".my.cnf"
(base) wuliuqi@wuliuqi:~/Documents$ ss -lntp |grep 4647
(base) wuliuqi@wuliuqi:~/Documents$ ps -ef |grep exporter
wuliuqi 8809 8679 0 19:15 pts/2 00:00:07 ./node_exporter
wuliuqi 11328 11228 0 20:16 pts/4 00:00:00 ./mysqld_exporter --config.my-cnf=.my.cnf
wuliuqi 11401 11092 0 20:16 pts/3 00:00:00 grep --color=auto exporter
(base) wuliuqi@wuliuqi:~/Documents$ ss -lntp |grep 11328
LISTEN 0 4096 *:9104 *:* users:(("mysqld_exporter",pid=11328,fd=3))
# 启动会监控 9104端口
- 普罗米修斯配置文件添加监控项后重启
- job_name: 'mysql'
static_configs:
- targets: ['locahost:9104']
# 此处监控本机 需要可以换成其他主机ip地址
- 重启普罗米修斯
systemctl restart prometheus.service
部署 Grafana
参考博客: https://cloud.tencent.com/developer/article/1986945
Ubuntu 系统安装
sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_9.4.7_amd64.deb
sudo dpkg -i grafana-enterprise_9.4.7_amd64.deb
登录(账号:admin 密码:admin)http://localhost:3000/ 用户名密码都是 admin。登录后,会让我们修改密码,则按提示操作即可,当然也可以点击跳过。
这里就可以看到 Grafana 的主界面了:
为 Grafana 配置 Prometheus 数据源
- 选择左下角配置选项
- 添加普罗米修斯数据源
- 增加 Prometheus 的 URL 即可:
点击最下方的 Save & Test,显示“Data source is working”,则表示数据源配置正常:
Grafana 展示node_exporter监控数据
按照下图的方式进入模板导入界面:
- 在 “Import via grafana.com” 下方输入:11074
点击 Load 会出现如下界面:
将 Name 改成你希望定义的名字,在 VictoriaMetrics 位置选择之前创建的 Prometheus 数据源,如下图:
点击 “Import”,会自动跳转到如下界面:
到这里,完成了 Grafana 展示 Prometheus 中 Linux 操作系统的监控数据。
Grafana 展示 MySQL 的监控数据
按照下图的方式进入模板导入界面:
在 “Import via grafana.com” 下方输入 7362:
或者在 https://grafana.com/grafana/dashboards/7362 页面下载 JSON 模板,然后点击 “Upload JSON file” 导入,然后会显示如下信息(目前还有其他一些模板,比如 https://github.com/percona/grafana-dashboards,有兴趣的可以尝试一下):
显示效果如下: