十、微服务的可观测性实操
一、可观测性
可观测性指的是通过工具收集系统,应用程序,组件等数据,查看其运行状态指标。分别有三个方向组成:日志(logging)、跟踪(tracing)、指标(metrices)
日志(logging)
记录离散事件,为了分析程序的行为
跟踪(tracing)
请求范围内的信息跟踪,目的是排查跟踪问题
指标(metrices)
指的是可聚合,目的是监控和预警
二、Prometheus与Grafana实现指标
Prometheus:是一套开源的系统监控报警框架。
特点:
1.本身是时序数据库,所以支持强大的多维度数据模型。
2.易管理, Prometheus server是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
3.有多种可视化图形界面。 易于伸缩。 需要指出的是,由于数据采集可能会有丢失,所以 Prometheus 不适用对采集数据要 100%。
Prometheus的适用场景:
Prometheus在记录纯数值时间序列方面表现非常好。它既适用于以服务器为中心的监控,也适用于高动态的面向服务架构的监控。 在微服务的监控上,Prometheus对多维度数据采集及查询的支持也是特殊的优势。
Prometheus更强调可靠性,即使在故障的情况下也能查看系统的统计信息。但设计金钱的统计就不适用,因为采集数据可能不是100%的
Prometheus核心组件介绍
Prometheus Server:Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。
Exporter:Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。
Alertmanager:Prometheus的告警组件,负责整个集群的告警发送、分组、调度、警告抑制等功能。
PushGateway:Pushgateway 它是prometheus的一个中间网管组件,类似于zabbix的zabbix-proxy。它主要解决的问题是一些不支持pull方式获取数据的场景,比如:自定义shell脚本来监控服务的健康状态,这个就没办法直接让prometheus来拉数据,这时就可以借助pushgateway,它是支持推送数据的,我们可以把对应的数据按照prometheus的格式推送到pushgateway,然后配置prometheus server拉取pushgateway即可。
ui:Grafana、prometheus-ui是用来图形化展示数据的组件,其中prometheus-ui是prometheus项目原生的ui界面,但是在数据展示方面不太好用,因此推荐grafana来展示你的数据,grafana支持prometheus的PromQL语法
安装Prometheus
mkdir /var/prometheus docker run -d --name=prometheus -p 9090:9090 prom/prometheus docker cp prometheus:/etc/prometheus/prometheus.yml /var/prometheus/ docker rm -f prometheus //上面的目的是为了把prometheus.yml文件复制出去运行 docker run -d --name=prometheus -p 9090:9090 -v /var/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
安装完成后运行服务器+9090的端口,即会出现以下界面
安装Grafana
docker run -d --name=grafana -p 3000:3000 grafana/grafana
安装完成后运行服务器+3000端口,默认账号密码是admin;成功登录会出现以下界面
安装Node Exporter(linux安装的是node,而windows安装的是win)
docker run -d -p 9100:9100 \ -v "/proc:/host/proc:ro" \ -v "/sys:/host/sys:ro" \ -v "/:/rootfs:ro" \ --net="host" \ --restart always \ prom/node-exporter
安装完成后输入9100/metrics,即可出现以下界面
配置Prometheus
vim /var/prometheus/prometheus.yml
在job_name下面新增以下配置文件
- job_name: service-a
static_configs:
- targets: ["159.75.18.105:9100"]
labels:
instance: node
重新启动Prometheus,打开浏览器可以见下图
配置Grafana
导入模板,其他模板可以到 https://grafana.com/grafana/dashboards 查看
最终效果
使用Docker Exporter监控容器
用docker进行安装
docker run --name docker_exporter --detach --restart always --volume "/var/run/docker.sock":"/var/run/docker.sock" --publish 9417:9417 prometheusnet/docker_exporter
在Prometheus进行配置,添加下面配置项
- job_name: service-a
static_configs:
- targets: ["159.75.18.105:9417"]
labels:
instance: node
在grafana根据上面node-exporter的步骤进行导入对应的模板 https://grafana.com/grafana/dashboards/11467,最终效果
使用docker metrics 监控docker
开启metrics
vim /etc/docker/daemon.json
{
"metrics-addr" : "159.75.18.105:9323",
"experimental" : true
}
重启docker
systemctl daemon-reload
service docker restart
配置Prometheus
- job_name: "docker"
static_configs:
- targets: ["159.75.18.105:9323", "192.168.88.146:9323"]
导入模板https://grafana.com/grafana/dashboards/1229
最后:文章实现参考博主https://www.cnblogs.com/skychen1218/p/15325120.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!