Prometheus是一个开源的服务监控系统,它通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上。
多维数据模型(时序列数据由metric名和一组key/value组成)
在多维度上灵活的查询语言(PromQl)
不依赖分布式存储,单主节点工作
通过基于HTTP的pull方式采集时序数据
可以通过push gateway进行时序列数据推送(pushing)
可以通过服务发现或者静态配置去获取要采集的目标服务器
多种可视化图表及仪表盘支持
Prometheus通过安装在远程机器上的exporter来收集监控数据,后面我们将使用到node_exporter收集系统数据。
Prometheus基于Golang编写,编译后的软件包,不依赖于任何的第三方依赖。用户只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启动Prometheus Server
安装Prometheus Server
[root@cloud-services ~]# export VERSION=2.13.0
[root@cloud-services ~]# wget --no-check-certificate https://github.com/prometheus/prometheus/releases/download/$VERSION/prometheus-$VERSION.linux-amd64.tar.gz
[root@cloud-services ~]# tar -zvxf prometheus-{$VERSION}.linux-amd64.tar.gz -C /usr/local/
[root@cloud-services ~]# ln -s /usr/local/prometheus-${VERSION}.linux-amd64/ /usr/local/prometheus
[root@cloud-services ~]# cd /usr/local/prometheus-${VERSION}.linux-amd64
解压后当前目录会包含默认的Prometheus配置文件promethes.yml
# 全局配置
global:
scrape_interval: 15s # 设置抓取间隔,默认为1分钟
evaluation_interval: 15s #估算规则的默认周期,每15秒计算一次规则。默认1分钟
# scrape_timeout #默认抓取超时,默认为10s
# Alertmanager相关配置
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 规则文件列表,使用'evaluation_interval' 参数去抓取
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# 抓取配置列表
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
创建数据存储⽬录
[root@cloud-services ~]# mkdir -p /data/prometheus/
将prometheus加⼊系统服务
[root@cloud-services ~]# vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus
Restart=on-failure
[Install]
WantedBy=multi-user.target
[root@cloud-services ~]# systemctl daemon-reload
[root@cloud-services ~]# systemctl start prometheus
[root@cloud-services ~]# systemctl status prometheus
[root@cloud-services ~]# systemctl enable prometheus
重新加载配置文件(不停服务)
[root@cloud-services ~]# curl -X POST http://localhost:9090/-/reload
Prometheus 默认使⽤9090端⼝启动, 如果想使⽤⾃定义端⼝, 则在启动命令中加⼊ — web.listen-address=:9999 , 这样使⽤的就是9999端⼝
ExecStart=/usr/local/prometheus/prometheus --web.enable-lifecycle --web.listen-address=:9999 --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus
验证
通过浏览器打开 http://IP:9090 , 验证系统是否成功启动
安装Grafana
[root@cloud-services ~]# wget https://dl.grafana.com/oss/release/grafana-6.4.2.linux-amd64.tar.gz
[root@cloud-services ~]# tar -zxvf grafana-6.4.2.linux-amd64.tar.gz -C /usr/local
[root@cloud-services ~]# ln -s /usr/local/grafana-6.4.2/ /usr/local/grafana
[root@cloud-services ~]# cd /usr/local/grafana-6.4.2
创建数据存储⽬录
[root@cloud-services ~]# mkdir -p /data/grafana
修改配置文件
修改 /usr/local/grafana-6.4.2.linux-amd64/conf/defaults.ini 文件,配置为上面新建的数据目录。
[root@cloud-services ~]# vim /usr/local/grafana-6.4.2.linux-amd64/conf/defaults.ini
data = /data/grafana/
logs = /data/grafana/log
plugins = /data/grafana/plugins
provisioning = /data/grafana/conf/provisioning
把grafana加入系统服务
[root@cloud-services ~]# vim /etc/systemd/system/grafana.service
[Unit]
Description=Grafana
After=network.target
[Service]
User=grafana
Group=grafana
Type=notify
ExecStart=/usr/local/grafana/bin/grafana-server --config=/usr/local/grafana/conf/defaults.ini --homepath=/usr/local/grafana
Restart=on-failure
[Install]
WantedBy=multi-user.target
[root@cloud-services ~]# systemctl daemon-reload
[root@cloud-services ~]# systemctl start grafana
[root@cloud-services ~]# systemctl status grafana
[root@cloud-services ~]# systemctl enable grafana
验证
grafana已经安装完毕。默认情况下,grafana-server会使⽤3000端⼝,使⽤浏览器打开 http://IP:3000 ,然后输⼊默认的账号密码 admin/admin 登录
添加数据源
下⾯把grafana和prometheus关联起来,也就是在grafana中添加添加数据源。在配置⻚⾯点击添加数 数据
然后选择prometheus,输⼊prometheus的url: http://localhost:9090 ; Access选择 Server , 点击 Save&Test 就完成了
安装node-exporter采集主机运⾏数据
[root@cloud-services ~]# wget --no-check-certificate https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
[root@cloud-services ~]# mkdir -p /usr/local/prometheus_exporter
[root@cloud-services ~]# tar -zvxf node_exporter-0.18.1.linux-amd64.tar.gz -C /usr/local/exporter
[root@cloud-services ~]# cd /usr/local/exporter/
[root@cloud-services ~]# ln -s node_exporter-0.18.1.linux-amd64/ node_exporter
启动node exporter
直接打开node_exporter的可执⾏⽂件即可启动 node export,默认会启动9100端⼝
#建议使用nohup
nohup /usr/local/exporter/node_exporter/node_exporter >/dev/null 2>&1 &
加入开机自启动
[root@cloud-services ~]# vim /etc/rc.local
nohup /usr/local/exporter/node_exporter/node_exporter >/dev/null 2>&1 &
配置Prometheus,收集node exporter的数据 **
node exporter启动后默认暴露了9100端⼝,并没有把数据传到prometheus,因此还需要在 prometheus中配置,让prometheus去获取这个接⼝的数据。编辑 prometheus.yml ⽂件,增加后⾯ 4⾏, 编辑后的⽂件内容如下(注意缩进):
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
#采集node exporter监控数据
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
重启prometheus,打开prometheus⻚⾯查看有没有对应的节点, 且节点的状态是不是 UP
[root@cloud-services ~]# systemctl restart prometheus
[root@cloud-services ~]# systemctl status prometheus
配置grafana⾯板展示node-exporter数据
第一次,最好自己手会 Granfana图表,不要用模板
⿏标放到左上⻆”+”, 点击 import , 点击Upload.json file,或将 1-node-exporter-forprometheus-dashboard-update-1102_rev11.json 的内容复制, 粘贴到输⼊框中, 然后点击
选择数据源
模板名自取
⾄此, 我们就可以查看到数据⾯板了. 其中左上⻆可以切换⾯板(如果有多个⾯板的话), 右上⻆可以选择查 看的时间范围和⾯板的刷新间隔
总结
- node-exporter 负责采集主机运⾏数据, 是数据的⽣产者
- Prometheus 类似于MySQL, ⽤来存储数据。Prometheus周期性的从Exporter暴露的HTTP服务拉 取监控数据, 并对外提供⾼级的查询功能
- Grafana 则⽤来展示数据, 通过Prometheus的接⼝查询出数据后, 以图形化的⽅式展示
- 除了node-exporter还有其他的采集程序, 如: 负责采集MySQL运⾏数据的mysqld_exporter, 负责 采集jvm运⾏数据的jmx_exporter, 这类采集程序在prometheus中叫做exporter
- Grafana除了可以从Prometheus拉取数据, 还可以从InfluxDB拉取, 因此我们可以⾃⼰编写程序采集 要监控的数据后, 然后保存到influxDB, 再通过Grafana将我们的统计数据展现出来. 这样的⽅式扩展性强, 指标更灵活可控, 底层监控推荐这种⽅式. 这种⽅式⽐起对接Prometheus, 将数据保存到 Prometheus更轻量(Prometheus适合应⽤级的监控数据统计, 如: 接⼝请求次数, 请求平均耗时等)
常见问题
Grafana 显示No data
此现象⼀般是服务器时间与本机时间不⼀致引起,调整两者时间⼀致即可解决
Grafana 显示数据不全
检查Prometheus的配置⽂件,将⼩型机的ip地址(静态地址:192.168.2.34)修改为 localhost即可解决
文章来源于互联网:Prometheus+grafana