一.介绍(https://prometheus.io)
Prometheus是一个开源监控系统,它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。
1.Prometheus的主要特性包括:
(1) 多维度数据模型
(2)灵活的查询语言
(3) 不依赖分布式存储,单个服务器节点是自治的
(4)通过服务(sd,准确的说是监控目标)发现或者静态配置,来发现目标服务对象
(5)支持多种多样的图表和界面展示,可以和Grafana集成
2.数据采集方式:
(1) Pull:通过HTTP协议定期去采集指标,只要被监控系统提供HTTP接口即可接入
(2) Push:被监控系统主动推送指标到网关,Prometheus定期从网关Pull
3.Prometheus包括以下组件:
(1)Prometheus Server:负责抓取和存储时间序列数据
(2)Push Gateway:推送网关,第三方可以推送数据到此网关,Prometheus Server再从此网关拉取数据
(3)多种导出工具,支持导出Graphite、StatsD等所需的格式
(4)命令行查询工具
(5)Alert Manager:告警管理器
(6)PromQL查询语言
4.架构图
二.安装
2.1.准备 (静态ip 可以上外网)
| 服务器 | ip地址 |
|prometheus- -|- 192.168.4.15- |
| 被监控服务器 | 192.168.4.20 |
| grafana服务器 | 192.168.4.21 |
1 mysqld_exporter 数据库采集插件
2 node_exporter 客户端采集插件
3 prometheus 监控主进程
4 grafana-dashboards 前端json文件
5 grafana 前端主进程
6 alertmanager 报警模块
2.2主机名
vim /etc/hosts
192.168.4.15 server
192.168.4.20 agent
192.168.4.21 node1
2.3时间同步
yum install -y ntpdate
ntpdate time.windows.com
2.4关闭防火墙
systemctl stop firewalld
2.5安装
yum -y install go
[root@server prometheus-2.18.1.linux-amd64]# mv /prometheus-2.18.1.linux-amd64/ /data/prometheus
[root@server prometheus]# chown -R root:root /data/prometheus/
[root@server data]# ln -sv prometheus-2.18.1.linux-amd64 prometheus
#故障:
level=error ts=2020-05-21T14:26:42.090Z caller=main.go:758 err="opening storage failed: lock DB dire
¥解决方案:
rm -rf /usr/local/prometheus/data/lock
编译
[root@server prometheus]# ./prometheus --config.file="/data/prometheus/prometheus.yml" &
ss -naltp |grep 9090
tcp LISTEN 0 128 :::9090 :::* users:
(("prometheus",pid=11010,fd=10))
浏览 http://192.168.4.15:9090
使用
promhttp_metric_handler_requests_total
promhttp_metric_handler_requests_total{code=“200”}
count(promhttp_metric_handler_requests_total) #计算返回时间序列的数量
2.6配置agent主机(192.168.4.20)
2.6.1安装node_exporter
[root@agent /]# tar -xf node_exporter-1.0.0-rc.1.linux-amd64.tar.gz
[root@agent /]# mv node_exporter-1.0.0-rc.1.linux-amd64 /usr//local/node_export
[root@agent node_export]# cd /usr/local/
启动*
[root@agent local]# nohup node_export/node_exporter &
[1] 12478
[root@agent local]# nohup: 忽略输入并把输出追加到"nohup.out"
状态
[root@agent local]# ss -nultp | grep 9100
在prometheus服务器上配置文件里面添加被监控机器的配置段
修改完了需要 pkill prometheus 重启
2.6.2.安装 mysql_exporter
[root@agent /]# tar -xf mysqld_exporter-0.12.1.linux-amd64.tar.gz
[root@agent /]# mv mysqld_exporter-0.12.1.linux-amd64 /usr/local/mysqld_exporter
[root@agent /]# cd /usr/local/mysqld_exporter/
[root@agent mysqld_exporter]#
需要安装mariadb或者mysql
[root@agent mysql]# yum -y install php php-mysql php-fpm
yum -y install mariadb mariadb-devel mariadb-server
mysql> grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by '1234';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
启动
[root@agent mysqld_exporter]# nohup /usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
nohup: 忽略输入并把输出追加到"nohup.out"
回到 prometheus
2.7安装Grafana可视化图形工具( https://grafana.com/)
2.7.1.安装grafana
状态
[root@node1 /]# ss -nutlp | grep 3000
tcp LISTEN 0 128 :::3000 :::* users:(("grafana-server",pid=24518,fd=8))
添加图形
各种功能
grafana图形显示MySQL监控数据
在21上
[root@node1 ~]# vim /etc/grafana/grafana.ini
[dashboards.json]
enabled=true
path= /var/lib/grafana/dashboards
cd /var/lib/grafana/
git clone https://github.com/percona/grafana-dashboards.git
[root@node1 grafana]# ls
grafana-dashboards grafana.db plugins png sessions
cp -r /var/lib/grafana/grafana-dashboards/dashboards/ /var/lib/grafana/
[root@node1 grafana]# ls
dashboards grafana-dashboards grafana.db plugins png sessions
重启
3.和睿象云报警监控
网页打开睿象云,大致步骤如下:
4.prometheus和docker
用docker来安装prometheus,同时用prometheus监控docker容器内容。接下来玩一下docker。
4.1安装docker https://docs.docker.com/
下载
[root@agent docker]# ls
docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch (1).rpm
[root@agent docker]# yum -y install *.rpm
[root@agent docker]# systemctl start docker
[root@agent docker]# systemctl start docker
4.2docker安装prometheus(基础)
现在再介绍一种安装prometheus的方法。
(1)步骤
[root@agent docker]# mkdir prometheus
[root@agent docker]# chmod 777 -R prometheus/
[root@agent docker]# cd prometheus/
[root@agent prometheus]# touch prometheus.yml
[root@agent prometheus]# vim prometheus.yml
[root@agent prometheus]# touch promgen.json
[root@agent prometheus]# vim promgen.json
[root@agent prometheus]# docker run --name prometheus --rm -d --net=host -v $(pwd)/prometheus:/etc/prometheus:rw prom/prometheus:latest
Unable to find image 'prom/prometheus:latest' locally
latest: Pulling from prom/prometheus
0f8c40e1270f: Pull complete
626a2a3fee8c: Pull complete
1d2b10deda04: Pull complete
bed362e99066: Pull complete
955effcce2b9: Pull complete
64f96eb6cfa4: Pull complete
c7c7519b7d34: Pull complete
a8f35dd0de56: Pull complete
634cde5d4f5a: Pull complete
ca853dc8025c: Pull complete
59fab01f3d9d: Pull complete
808f512dd238: Pull complete
Digest: sha256:5880ec936055fad18ccee798d2a63f64ed85bd28e8e0af17c6923a090b686c3d
Status: Downloaded newer image for prom/prometheus:latest
e4994dcb06e7416d53bc19f645b3d87dc9c483f87c72c81b4ef068d0851ba732
(2)文件
[root@agent prometheus]# cat prometheus.yml
global:
scrape_interval: 15s #设置抓取数据的时间间隔,间隔设置为每15秒一次。默认为每1分钟
evaluation_interval: 15s #设置规则刷新,每15秒刷新一次规则。默认值为每1分钟。
scrape_timeout: 15s #设定抓取数据的超时时间,默认为10s
external_labels:
cluster_name: 'promtheus'
rule_files: # 报警规则文件
- "/etc/prometheus/promgen.rule.yml"
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
scrape_configs:
- job_name: 'promgen'
file_sd_configs:
- files:
- "/etc/prometheus/promgen.json"
- job_name: 'blackbox'
metrics_path: /probe
params:
file_sd_configs:
- files:
- "/etc/prometheus/blackbox.json"
relabel_configs:
- source_labels: [__address__]
regex: (.*)(:80)?
target_label: __param_target
replacement: ${1}
- source_labels: [__param_target]
regex: (.*)
target_label: instance
replacement: ${1}
- source_labels: []
regex: .*
target_label: __address__
[root@agent prometheus]# cat promgen.json
[
{
"labels": {
"__farm_source": "promgen",
"__metrics_path__": "/metrics",
"__shard": "Default",
"farm": "hosts",
"job": "node-exporter",
"project": "test-project",
"service": "test-service"
},
"targets": [
"192.168.4.20:9100",
"192.168.4.21:9100"
]
}
]
4.3基于docker容器部署Prometheus服务——云平台监控利器
Prometheus Server、Node Exporter、cAdvrisor、Grafana。
(1)各个组件的作用如下:
Prometheus Server:Prometheus服务的主服务器 ;
Node Exporter:收集Host硬件和操作系统的信息;
cAdvrisor:负责收集Host上运行的容器信息;
Grafana:用来展示Prometheus监控操作界面
4.3.1 node server