1.prometheus
服务端:prometheus-2.37.4.linux-amd64.tar.gz
客户端:node_exporter-1.5.0.linux-amd64.tar.gz
服务端与客户端没有直接的版本对应关系,选择一个满足我们需求的服务端即可
下载链接:https://prometheus.io/download/
Prometheus总配置文件
[root@localhost prometheus-2.37.4.linux-amd64]# cat ./prometheus.yml
global:
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "nodes" #在Prometheus的ui界面中会显示的job
file_sd_configs:
- files:
- targets/nodes-*.yaml #相当于include 配置文件
include文件内容
[root@localhost prometheus-2.37.4.linux-amd64]# cat targets/nodes-all.yaml
- targets:
- 192.168.1.222:9100
- 192.168.0.145:9100
labels:
app: node-exporter
job: node
关于PromQL,在Prometheus页面中graph过滤,好像是说grafana获取数据逻辑就是从这里
Alertmanager告警,内网没配,线上配了
2.Grafana
Grafana可以直接下镜像,也可以去Grafana下载包解压。可以下载各种各样的模块,我就拿下好的操作了。
Grafana数据源data source添加Prometheus:
操作过程
启动grafana(进入grafana的目录操作):nohup ./grafana-server &
启动prometheus(进入prometheus的目录操作):nohup ./prometheus &
将192.168.2.100:/usr/local/node_exporter-1.5.0.linux-amd64.tar.gz 拷贝到 192.168.0.145
解压到192.168.0.145:/usr/local/node_exporter
启动客户端(port:9100):nohup ./node_exporter &
修改/usr/local/prometheus/targets/node-all.yaml配置文件添加客户端
重启Prometheus
Prometheus页面增加一台192.168.0.145
grafana仪表板自动添加,细节配合PromQL添加新的仪表盘
分享一些PromQL语句和展示结果
node_uname_info{vendor=~"$vendor",account=~"$account",group=~"$group",name=~"$name",name=~".*$sname.*"} - 0
sum(time() - node_boot_time_seconds{vendor=~"$vendor",account=~"$account",group=~"$group",name=~"$name",name=~".*$sname.*"})by(instance)/86400
node_memory_MemTotal_bytes{vendor=~"$vendor",account=~"$account",group=~"$group",name=~"$name",name=~".*$sname.*"} - 0
PromQL语句在这三个地方点点点是能点出来的
3.拉取一台服务器日志(promtail+loki+grafana)
Promtail:相当于efk中的filebeat,采集日志发送给loki
Loki:相当于efk中的es,用于存储日志和处理查询
Grafana:相当于efk中的kibana,用于ui展示
Promtail日志采集器
服务器:所有被采集日志的服务器
目录:/usr/local/promtail
配置文件:promtail-local-config.yaml
启动方式:nohup /usr/local/promtail/promtail-linux-amd64 -config.file=/usr/local/promtail/promtail-local-config.yaml &
server:
http_listen_port: 9080 # 监听端口
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml # 读取了多少日志,会写在这个文件中
clients:
- url: http://192.168.2.100:3100/loki/api/v1/push # 传到loki的地址
scrape_configs:
- job_name: dev-java-spring # 这个job的名称,可以通过写多个job_name来获取多个日志,并取不同的标签
static_configs:
- targets: # 好像只能从本地找,不管怎么写 值都是localhost,应该是可以去掉的
- 192.168.0.168-spring
labels:
job: 168-spring-java # job的标签,grafana取的就是这个
__path__: /usr/local/spring/*/nohup.out # 读取日志的路径,可以通过“ __path__: {xxx.log,xxx.log}”输入一个列表传多个日志文件
loki 日志服务器
服务器: loki日志服务器,跟grafana放一台也行
目录:/usr/local/docker_loki
配置文件:loki-local-config.yaml ----配置一些基本的信息,ip 端口 数据存放路径
启动方式:nohup ./loki-linux-amd64 --config.file=/usr/local/docker_loki/loki-local-config.yaml &
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9095 #grpc监听端口,默认为9095,可直接修改
grpc_server_max_recv_msg_size: 157286400000 #grpc最大接收消息值,默认4m
grpc_server_max_send_msg_size: 157286400000 #grpc最大发送消息值,默认4m
ingester:
lifecycler:
address: 192.168.2.100 #IP地址
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
max_transfer_retries: 0
max_chunk_age: 20m #一个timeseries块在内存中的最大持续时间。如果timeseries运行的时间超过此时间,则当前块将刷新到存储并创建一个新块
schema_config:
configs:
- from: 2018-04-15
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 720h
storage_config:
boltdb:
directory: /usr/local/loki/loki_data/index
filesystem:
directory: /usr/local/loki/loki_data/chunks
limits_config:
ingestion_rate_mb: 3200
ingestion_burst_size_mb: 6400
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 720h
chunk_store_config:
max_look_back_period: 720h #回看日志行的最大时间,只适用于即时日志
table_manager:
retention_deletes_enabled: true #日志保留周期开关,默认为false
retention_period: 720h #日志保留周期
Grafana
服务器:
目录: /usr/local/docker_grafana
配置:配置数据源(从哪里获取的loki数据)
localhost:3000/datasources
日志收集展示流程:
先由promtail收集日志并在配置文件中配置loki的地址传到loki上
Loki基本上不用配置什么,配置日志数据存放位置
Grafana配置data source,从loki中获取数据
测试:
如果配置文件中__path__写了多个文件,还可以指定文件名
添加监控日志
统计图:
图的类型都可以选,但是要加个时间范围限制Count over time,这样才能根据日志统计出访问量。
插入
Prometheus页面:ip:9090
Prometheus监控概念:Prometheus本身可以接收客户端提供的各种数据,比如/根分区使用量、内存使用量等基础的数据;
需要一下高级的数据,比如redis、mysql的连接状态,进程的活动状态等,有对应的process-exporter,相当于插件。
只需把端口暴露给Prometheus服务端,即可监控对应数据。而Prometheus可以使用数据做图表给grafana展示,还可以使用数据定义告警规则
4.Alert告警
Prometheus没有告警功能,但是它可以通过写规则rules来定义告警名称、级别,再通过告警管理工具alertmanager接收rules的告警名称、级别来触发告警。
该图为Prometheus定义的监控进程状态的规则rules,在prometheus.yaml中引用该规则,上文说过,prometheus.yaml也监听targets里设置的ip:端口,规则rules里所使用的参数比如namedprocess_namegroup_num_procs,则会获取监听targets里客户端的ip:9256端口为9256的机器
配置文件:/usr/local/prometheus/alert_rules/process_down.yml
groups:
- name: Allprocess
rules:
- alert: InproessDown
expr: namedprocess_namegroup_num_procs < 1 #promeQL语句,获取监听参数的
for: 1m
annotations: #描述,等会会用到
title: "process down"
description: 'server is shutdown .'
labels:
severity: 'critical' #告警级别
配置文件:prometheus.yml 添加
rule_files:
- "rules/*.yaml"
- "alert_rules/*.yaml"
#读取rules配置文件
expr: namedprocess_namegroup_num_procs < 1 怎么理解,如图(Prometheus界面)
配好之后,重启Prometheus,就能在Prometheus界面的Alters看见告警信息了
在grafana也能看
配置alert之后,其实它只会在页面中显示,并不会通知到我们,不能算是真正意义上的告警,要想实现告警,我们还需一个工具alertmanager
5.alertmanager
alertmanager的作用:暴露端口,使得Prometheus可以将alert信息传给它,再通过配置的webhook,实现短信、钉钉、电话等告警
官网地址:https://prometheus.io/download/
Prometheus官网,下面就有alertmanager
alertmanager配置文件:/usr/local/alertmanager/alertmanager.yml
启动方式:nohup ./alertmanager &
global:
resolve_timeout: 5m
route:
group_by: ['alertname','severity','namespace'] #这些是rules中的描述,告警名称、级别、命名空间
group_wait: 10s
group_interval: 10s
repeat_interval: 10h
receiver: 'prometheusalert-phone'
routes:
- receiver: 'prometheusalert-phone'
group_wait: 10s
match:
level: '1'
group_interval: 15s
repeat_interval: 10h
receivers:
- name: 'prometheusalert-phone'
webhook_configs:
#这是webhook的接口地址,在下文中配置prometheusalert获取。该url是发送一个请求,即接收到告警触发webhook
#可以配置多个url,实现发送钉钉,发送邮件以及发送短信
- url: 'http://192.168.1.5:8800/prometheusalert?type=alydx&tpl=ali-phone&phone=xxxxxx'
send_resolved: true
Prometheus配置文件添加
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.1.5:9093
在Prometheus添加Alertmanager位置参数,把告警传给alertmanager
添加完成之后,可以在Prometheus页面的status中的configuration查看
6.webhook
1、webhook的url可以由开发提供,开发根据阿里云等服务商短信服务提供的api接口,实现短信服务的发送
2、当然最简单的方法就是用官方的PrometheusAlert
Prometheus Alert 是开源的运维告警中心消息转发系统,支持主流的监控系统 Prometheus,日志系统 Graylog 和数据可视化系统 Grafana 发出的预警消息。通知渠道支持钉钉、微信、华为云短信、腾讯云短信、腾讯云电话、阿里云短信、阿里云电话等。
- PrometheusAlert 特性
1.支持多种消息来源,目前主要有prometheus、graylog2、graylog3、grafana。
2.支持多种类型的发送目标,支持钉钉、微信、腾讯短信、腾讯语音、华为短信。
3.针对Prometheus增加了告警级别,并且支持按照不同级别发送消息到不同目标对象。
4.简化Prometheus分组配置,支持按照具体消息发送到单个或多个接收方。
5.增加手机号码配置项,和号码自动轮询配置,可固定发送给单一个人告警信息,也可以通过自动轮询的方式发送到多个人员且支持按照不同日期发送到不同人员。
6.增加 Dashboard,暂时支持测试配置是否正确 部署方法 PrometheusAlert 可以部署在本地和云平台上,支持windows、linux、公有云、私有云、混合云、容器和kubernetes。- 部署方法 PrometheusAlert 可以部署在本地和云平台上,支持windows、linux、公有云、私有云、混合云、容器和kubernetes。
这段描述转载原文链接:https://blog.csdn.net/weixin_49566876/article/details/128930481
PrometheusAlert官网:https://github.com/feiyu563/PrometheusAlert
根据github文档下载部署PrometheusAlert
配置文件为./conf/app.conf
里面每一条参数都有注释
启动方式:nohup ./PrometheusAlert &
配置文件的配置就是各种告警的接口填写,钉钉、微信机器人的webhook,短信云服务商的api接口,邮箱的配置等
通过配置文件app.conf配置的端口,直接ip:端口进入
webhook url获取
其中的AlertTemplate里面的路径就是我们在altermanager配置文件webhook所填的url
在配置文件中配置完接口,还能通过页面中test进行测试