微服务可观测性工具实践指南
1. 分布式追踪与OpenTracing
1.1 向Zipkin发布追踪数据
要向Zipkin发布OpenTracing兼容的追踪数据,首先需要在
pom.xml
文件中添加以下依赖:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-zipkin-starter</artifactId>
<version>0.1.1</version>
</dependency>
接着,在
application.properties
文件中添加
opentracing.zipkin.http-sender.baseUrl
属性,指定Zipkin服务器的URL:
opentracing.zipkin.http-sender.baseUrl=http://localhost:9411/
运行订单处理微服务并使用以下cURL命令进行调用(从相应目录执行):
> mvn clean install
> mvn spring-boot:run
> curl http://localhost:9000/order/11
多次执行调用后,可通过Zipkin的Web控制台(
http://localhost:9411/zipkin/
)查看记录的数据。
1.2 向Jaeger发布追踪数据
Jaeger是另一个受Zipkin和Dapper启发的开源分布式追踪系统。以下是向Jaeger发布追踪数据的步骤:
1. 使用Docker启动Jaeger实例:
> docker run -d -p 5775:5775/udp -p 16686:16686 jaegertracing/all-in-one:latest
启动后,可通过
http://localhost:16686/
访问其Web控制台。
2. 在
pom.xml
文件中添加以下Maven依赖:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-cloud-starter</artifactId>
<version>0.1.13</version>
</dependency>
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-cloud-starter-jaeger</artifactId>
<version>0.1.13</version>
</dependency>
-
在
application.properties文件中添加以下属性,指定Jaeger服务器的地址和端口:
opentracing.jaeger.udp-sender.host=localhost
opentracing.jaeger.udp-sender.port=5775
- 运行订单处理微服务并使用以下cURL命令进行调用(从相应目录执行):
> mvn clean install
> mvn spring-boot:run
> curl http://localhost:9000/order/11
多次执行调用后,可通过Jaeger的Web控制台(
http://localhost:16686/
)查看记录的数据。
2. 使用Prometheus进行指标监控
2.1 从Spring Boot微服务暴露指标
要让Spring Boot微服务以Prometheus能理解的格式暴露指标,需进行以下操作:
1. 在
pom.xml
文件中添加以下Maven依赖:
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_spring_boot</artifactId>
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_hotspot</artifactId>
<version>0.1.0</version>
</dependency>
-
在
OrderProcessingApp.java类文件中添加@EnablePrometheusEndpoint和@EnableSpringBootMetricsCollector注解。 -
在
application.properties文件中添加以下属性,以无安全方式暴露指标:
management.security.enabled=false
- 启动订单处理微服务:
> mvn clean install
> mvn spring-boot:run
服务启动后,可通过
http://localhost:9000/prometheus
访问其发布的指标。以下是部分指标输出示例:
# HELP httpsessions_max httpsessions_max
# TYPE httpsessions_max gauge
httpsessions_max -1.0
# HELP httpsessions_active httpsessions_active
# TYPE httpsessions_active gauge
httpsessions_active 0.0
# HELP mem mem
# TYPE mem gauge
mem 549365.0
# HELP mem_free mem_free
# TYPE mem_free gauge
mem_free 211808.0
# HELP processors processors
# TYPE processors gauge
processors 8.0
# HELP instance_uptime instance_uptime
# TYPE instance_uptime gauge
instance_uptime 313310.0
# HELP uptime uptime
# TYPE uptime gauge
uptime 317439.0
# HELP systemload_average systemload_average
# TYPE systemload_average gauge
systemload_average 2.13720703125
# HELP heap_committed heap_committed
# TYPE heap_committed gauge
heap_committed 481280.0
# HELP heap_init heap_init
# TYPE heap_init gauge
heap_init 262144.0
# HELP heap_used heap_used
# TYPE heap_used gauge
heap_used 269471.0
# HELP heap heap
# TYPE heap gauge
heap 3728384.0
# HELP nonheap_committed nonheap_committed
# TYPE nonheap_committed gauge
nonheap_committed 71696.0
2.2 设置Prometheus
使用Docker设置Prometheus很简单,步骤如下:
1. 创建
prometheus.yml
文件,指定要监控的服务。示例如下:
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 10s
static_configs:
- targets: ['localhost:9090']
- job_name: 'orderprocessing'
scrape_interval: 10s
metrics_path: '/prometheus'
static_configs:
- targets: ['10.0.0.93:9000']
- 使用以下命令启动Prometheus Docker实例:
> docker run -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
-
启动后,访问
http://localhost:9090/targets,可查看Prometheus监控的服务及各端点的状态。
2.3 使用Prometheus构建图表
要使用Prometheus构建图表来监控发布的指标,可按以下步骤操作:
1. 访问
http://localhost:9090/graph
。
2. 选择要监控的指标,例如
heap_used
。
3. 点击
Graph
标签,即可查看使用堆内存随时间变化的图表。
以下是一个简单的mermaid流程图,展示了Prometheus监控微服务指标的流程:
graph LR
A[微服务] -->|暴露指标| B[Prometheus]
B -->|拉取指标| C[存储指标]
C -->|查询指标| D[构建图表]
2.4 使用Grafana进行分析和监控
Grafana是一个用于分析和监控的开源工具,在构建仪表盘方面比Prometheus更强大。以下是使用Grafana构建仪表盘的步骤:
1. 使用Docker启动Grafana实例:
> docker run -d -p 3000:3000 grafana/grafana
启动后,使用
admin/admin
凭证登录
http://localhost:3000
。
2. 添加新的数据源:
- 点击
Add Data Source
,选择
Prometheus
作为数据源类型。
- 为数据源命名,如
prometheus_ds
。
- 设置
HTTP URL
属性,指向Prometheus服务器。
3. 创建新的仪表盘:
- 访问
http://localhost:3000/dashboard/new
。
- 选择
Graph
,点击面板标题并选择
Edit
。
- 在
Metrics
下选择通过所选数据源提供的任何指标,可定义多个查询。例如,选择
heap
和
heap_used
。
- 完成配置后,可在Grafana主页的“最近查看的仪表盘”中找到新创建的仪表盘。
2.5 使用Grafana创建警报
Grafana允许创建警报并将其与图表或仪表盘面板关联。创建警报的步骤如下:
1. 编辑要关联警报的图表,点击其标题并选择
Edit
。
2. 在
Alerts
下创建规则,指定系统应在何种条件下触发警报。例如,以下查询表示当指标
A
(这里是
heap
)的最大值在接下来的五分钟内高于3时触发警报,规则每60秒评估一次:
WHEN max() OF query(A, 5m, now) IS ABOVE 3
Grafana还支持多种函数,如
avg()
、
min()
、
sum()
等。
3. 设置警报规则后,可在
Notifications
菜单下配置通知接收方和消息内容。Grafana支持多种通知渠道,包括电子邮件、PagerDuty、Telegram、Slack等。
2.6 使用Fluentd日志收集器
Fluentd是一个可扩展的数据收集工具,可作为守护进程运行。微服务可以将日志发布到Fluentd,它能处理不同格式的日志并将其转发到第三方系统。以下是使用Fluentd从Docker容器中的微服务收集日志的步骤:
2.6.1 以Docker容器方式启动Fluentd
使用以下命令启动Fluentd Docker容器:
> docker run -d -p 24224:24224 -v ~/data:/fluentd/log fluent/fluentd
在启动前,确保主机文件系统的主目录中有一个名为
data
的目录。通过
-v
选项将主机的
~/data
目录映射到容器的
/fluentd/log
目录,以持久化日志数据。
2.6.2 从Docker容器中的微服务向Fluentd发布日志
使用以下命令启动包含订单处理微服务的Docker容器:
> docker run -d -p 9000:9000 --log-driver=fluentd prabath/sample01
通过
--log-driver=fluentd
参数,Docker将使用Fluentd驱动将微服务的标准输出日志发布到Fluentd。如果Fluentd运行在不同的端口,需要通过
fluentd-address
参数指定其地址。
2.6.3 Fluentd的工作原理
Fluentd使用配置文件
fluent.conf
(默认位于容器文件系统的
/fluentd/etc
目录)定义输入源和输出目标。以下是默认
fluent.conf
文件的内容:
<source>
@type forward
@id input1
@label @mainstream
port 24224
</source>
<filter **>
@type stdout
</filter>
<label @mainstream>
<match docker.**>
@type file
@id output_docker1
path /fluentd/log/docker.*.log
symlink_path /fluentd/log/docker.log
append true
time_slice_format %Y%m%d
time_slice_wait 1m
time_format %Y%m%dT%H%M%S%z
</match>
<match **>
@type file
@id output1
path /fluentd/log/data.*.log
symlink_path /fluentd/log/data.log
append true
time_slice_format %Y%m%d
time_slice_wait 10m
time_format %Y%m%dT%H%M%S%z
</match>
</label>
source
标签定义输入源,
match
标签根据事件的标签匹配规则处理消息并定义输出目标。
以下是一个表格总结各工具的相关信息:
| 工具名称 | 功能 | 启动命令 | 访问地址 |
| ---- | ---- | ---- | ---- |
| Zipkin | 分布式追踪 | 需提前启动 |
http://localhost:9411/zipkin/
|
| Jaeger | 分布式追踪 |
docker run -d -p 5775:5775/udp -p 16686:16686 jaegertracing/all-in-one:latest
|
http://localhost:16686/
|
| Prometheus | 指标监控 |
docker run -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
|
http://localhost:9090/
|
| Grafana | 分析和监控 |
docker run -d -p 3000:3000 grafana/grafana
|
http://localhost:3000/
|
| Fluentd | 日志收集 |
docker run -d -p 24224:24224 -v ~/data:/fluentd/log fluent/fluentd
| 无直接访问地址 |
通过以上步骤和工具,我们可以实现微服务的分布式追踪、指标监控、日志收集和可视化分析,提高微服务系统的可观测性和运维效率。
2.7 各工具使用流程总结
为了更清晰地展示各个工具的使用流程,下面以表格形式呈现:
| 工具 | 使用流程 |
| ---- | ---- |
| Zipkin | 1. 添加依赖到
pom.xml
:
xml<br><dependency><br> <groupId>io.opentracing.contrib</groupId><br> <artifactId>opentracing-spring-zipkin-starter</artifactId><br> <version>0.1.1</version><br></dependency><br>
2. 在
application.properties
添加配置:
properties<br>opentracing.zipkin.http-sender.baseUrl=http://localhost:9411/<br>
3. 运行微服务:
bash<br>> mvn clean install<br>> mvn spring-boot:run<br>> curl http://localhost:9000/order/11<br>
4. 访问
http://localhost:9411/zipkin/
查看数据 |
| Jaeger | 1. 启动Docker实例:
bash<br>> docker run -d -p 5775:5775/udp -p 16686:16686 jaegertracing/all-in-one:latest<br>
2. 添加依赖到
pom.xml
:
xml<br><dependency><br> <groupId>io.opentracing.contrib</groupId><br> <artifactId>opentracing-spring-cloud-starter</artifactId><br> <version>0.1.13</version><br></dependency><br><dependency><br> <groupId>io.opentracing.contrib</groupId><br> <artifactId>opentracing-spring-cloud-starter-jaeger</artifactId><br> <version>0.1.13</version><br></dependency><br>
3. 在
application.properties
添加配置:
properties<br>opentracing.jaeger.udp-sender.host=localhost<br>opentracing.jaeger.udp-sender.port=5775<br>
4. 运行微服务:
bash<br>> mvn clean install<br>> mvn spring-boot:run<br>> curl http://localhost:9000/order/11<br>
5. 访问
http://localhost:16686/
查看数据 |
| Prometheus | 1. 微服务添加依赖到
pom.xml
:
xml<br><dependency><br> <groupId>io.prometheus</groupId><br> <artifactId>simpleclient_spring_boot</artifactId><br> <version>0.1.0</version><br></dependency><br><dependency><br> <groupId>io.prometheus</groupId><br> <artifactId>simpleclient_hotspot</artifactId><br> <version>0.1.0</version><br></dependency><br>
2. 在
OrderProcessingApp.java
添加注解:
@EnablePrometheusEndpoint
和
@EnableSpringBootMetricsCollector
3. 在
application.properties
添加配置:
properties<br>management.security.enabled=false<br>
4. 启动微服务:
bash<br>> mvn clean install<br>> mvn spring-boot:run<br>
5. 创建
prometheus.yml
:
yaml<br>scrape_configs:<br> - job_name: 'prometheus'<br> scrape_interval: 10s<br> static_configs:<br> - targets: ['localhost:9090']<br> - job_name: 'orderprocessing'<br> scrape_interval: 10s<br> metrics_path: '/prometheus'<br> static_configs:<br> - targets: ['10.0.0.93:9000']<br>
6. 启动Prometheus Docker实例:
bash<br>> docker run -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus<br>
7. 访问
http://localhost:9090/targets
查看状态 |
| Grafana | 1. 启动Docker实例:
bash<br>> docker run -d -p 3000:3000 grafana/grafana<br>
2. 登录
http://localhost:3000
(
admin/admin
)
3. 添加数据源:选择
Prometheus
,设置URL等
4. 创建仪表盘:访问
http://localhost:3000/dashboard/new
,选择指标等
5. 创建警报:编辑图表,设置规则,配置通知 |
| Fluentd | 1. 启动Docker实例:
bash<br>> docker run -d -p 24224:24224 -v ~/data:/fluentd/log fluent/fluentd<br>
2. 启动微服务容器:
bash<br>> docker run -d -p 9000:9000 --log-driver=fluentd prabath/sample01<br>
|
2.8 工具之间的交互关系
各工具在微服务可观测性中相互协作,形成一个完整的体系。以下是一个mermaid流程图,展示它们之间的交互关系:
graph LR
A[微服务] -->|追踪数据| B[Zipkin]
A -->|追踪数据| C[Jaeger]
A -->|指标数据| D[Prometheus]
D -->|数据提供| E[Grafana]
A -->|日志数据| F[Fluentd]
F -->|日志转发| G[第三方系统]
2.9 注意事项
在使用这些工具时,有一些注意事项需要关注:
1.
网络和权限
:确保各个工具之间的网络连通性,例如Grafana要能访问Prometheus服务器,Fluentd要能接收微服务的日志。同时,注意工具的权限设置,如Prometheus和Grafana的安全配置。
2.
版本兼容性
:不同工具的不同版本可能存在兼容性问题,在选择版本时要进行充分的测试和验证。例如,某些依赖的版本可能会影响微服务与工具之间的集成。
3.
资源占用
:这些工具在运行过程中会占用一定的系统资源,如内存、CPU等。在生产环境中,要合理规划资源,避免因资源不足导致系统性能下降。
2.10 总结
通过使用Zipkin、Jaeger进行分布式追踪,Prometheus进行指标监控,Grafana进行可视化分析和警报设置,以及Fluentd进行日志收集和转发,我们可以全面提升微服务系统的可观测性。各个工具都有其独特的功能和优势,相互配合使用能更好地满足微服务运维和监控的需求。在实际应用中,要根据具体的业务场景和需求,合理选择和配置这些工具,以确保微服务系统的稳定运行和高效管理。
希望以上内容能帮助你更好地理解和应用这些微服务可观测性工具,提升微服务系统的可维护性和可靠性。
超级会员免费看
45

被折叠的 条评论
为什么被折叠?



