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即可解决

END

本文标题:Prometheus+grafana

本文作者:Mark

本文链接:https://www.ym68.cc/monitor_server/202109350.html

版权声明:转载或者引用本文内容请注明来源及原作者,本文著作权归作者 (Mark) 所有。

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

最后修改:2021 年 12 月 22 日
如果觉得我的文章对你有用,请随意赞赏