采集 Elasticsearch 火焰图

本文介绍了在Elasticsearch性能分析过程中,如何使用Arthas和async-profiler采集火焰图。由于Arthas在特定环境下遇到权限和GLIBC版本问题,最终选择了async-profiler,并成功在1.7版本上生成了火焰图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

有个 ES 集群,业务写数入集群时经常导致集群 CPU 告警和集群端口响应超时(20s无响应),故希望通过采集火焰图分析原因。

工具选择

Arthas

Introduction

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?

Arthas支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

以上描述摘自官方描述~~~

Arthas 自 3.1.5 版本起集成了开箱即用的 Profiler / 火焰图功能,因此首选了通过 Arthas 工具来采集。

<think>好的,用户想了解Apache SkyWalking能收集哪些性能和监控指标。我之前在回答Prometheus收集的资源类型时,提到过SkyWalking的应用层指标,比如JVM指标。现在需要详细说明SkyWalking自身的指标收集能力。 首先,用户可能对SkyWalking的基本功能不太清楚,需要先介绍其核心监控维度。根据提供的引用,特别是引用[2],SkyWalking在链路跟踪、服务依赖、Java VM指标监控等方面有优势。所以应该分几个大类来组织指标类型,比如应用性能指标、链路追踪数据、服务拓扑、日志关联、JVM监控等。 接下来,每个类别需要具体的指标例子。例如,应用性能指标可能包括请求吞吐量、响应时间、错误率等。链路追踪方面,Span数据、TraceID关联这些是关键。服务拓扑部分,服务间的调用关系和依赖需要提到。 另外,用户提供的引用[3]、[4]、[5]提到SkyWalking的探针配置和启动方式,说明用户可能对如何集成SkyWalking到Java应用感兴趣,所以需要提到无侵入的Java Agent字节码增强技术,以及如何配置参数。 然后,需要对比其他工具,比如Zipkin,根据引用[2],强调SkyWalking的优势,如更详细的监控项和可视化报表。同时,存储机制支持ES和MySQL,这点也需要提到。 用户可能还想知道这些指标如何帮助实际应用,比如故障定位、性能优化,所以需要举一些实际应用场景的例子,比如结合Prometheus的JVM指标进行瓶颈分析,或者通过TraceID关联日志和监控数据。 最后,确保回答结构清晰,分点列出,使用中文,符合之前的格式要求,比如使用$...$格式的数学表达式(如果有的话),但看起来这里可能不太需要。同时,生成相关问题,帮助用户进一步探索。</think>### Apache SkyWalking 收集的核心性能与监控指标解析 Apache SkyWalking 作为分布式系统的全链路观测平台,其采集的指标覆盖应用性能、链路追踪、服务拓扑等多个维度,以下是其核心指标类型及技术实现原理: --- #### **1. 应用性能指标(APM)** **采集对象**:微服务/应用实例 **核心指标**: - **请求吞吐量**:`service_cpm`(每分钟请求量)、`endpoint_cpm`(端点级请求量) - **响应时间**:`service_resp_time`(服务平均响应时间)、`endpoint_percentile`(P50/P75/P90/P95/P99分位数) - **错误率**:`service_sla`(服务可用性)、`endpoint_error_count`(端点错误次数) - **线程池状态**:`thread_pool_active_count`(活跃线程数)、`thread_pool_queue_size`(任务队列积压量) **技术实现**: - 通过 Java Agent 字节码增强技术无侵入采集指标[^2][^4] - 示例探针配置(IDEA 启动参数): ```bash -javaagent:/path/skywalking-agent.jar -Dskywalking.agent.service_name=your-service -Dskywalking.collector.backend_service=localhost:11800 ``` --- #### **2. 链路追踪数据(Tracing)** **采集对象**:分布式请求链路 **核心数据**: - **Span 数据**:包含操作名称、耗时、标签(如 HTTP 状态码、数据库 SQL 语句) - **Trace 上下文**:`TraceID`(全局唯一标识)、`ParentSpanID`(父子链路关系) - **跨服务调用**:RPC/HTTP 调用的目标服务、协议类型、响应状态 **可视化能力**: - 自动生成调用链火焰,支持逐层展开耗时分析[^1] - 与 Zipkin 对比优势:支持更细粒度的标签过滤和跨服务依赖分析[^2] --- #### **3. 服务拓扑与依赖关系** **采集对象**:服务间调用网络 **核心指标**: - **服务依赖**:`service_relation_cpm`(服务间调用频次)、`service_relation_resp_time`(跨服务调用延迟) - **数据库依赖**:`database_access_latency`(数据库操作延迟)、`database_slow_query`(慢查询统计) - **消息队列消费**:`mq_consumer_latency`(消息处理耗时)、`mq_message_accumulation`(消息积压量) **技术特性**: - 基于流量分析自动构建实时拓扑,支持动态更新[^1] - 示例:识别 Redis 连接池耗尽导致的级联故障 --- #### **4. JVM 运行时监控** **采集对象**:Java 虚拟机 **核心指标**: - **内存使用**:`jvm_heap_used`(堆内存使用量)、`jvm_nonheap_committed`(非堆内存提交量) - **GC 状态**:`jvm_gc_time`(GC 总耗时)、`jvm_gc_count`(GC 次数) - **线程状态**:`jvm_thread_live`(存活线程数)、`jvm_thread_daemon`(守护线程数) **配置示例**: ```bash # 探针高级配置(启用 JVM 指标采集-Dskywalking.plugin.jvm.enabled=true ``` --- #### **5. 基础设施监控** **采集对象**:服务器/容器 **集成方式**: - **Prometheus 适配器**:通过 OpenMetrics 协议导入主机 CPU/内存/磁盘指标 - **Kubernetes 元数据**:自动采集 Pod/Node 资源使用率并与服务指标关联 **联动场景**: - 当 `container_cpu_usage` 超过阈值时,关联分析对应服务的 `service_resp_time` 突增现象 --- #### **6. 日志关联与上下文** **特殊能力**: - **TraceID 注入日志**:通过 MDC(Mapped Diagnostic Context)自动追加 `[TID: xxxx]` 到日志条目[^3] - **日志-指标联动**:在 SkyWalking UI 中直接查看异常日志关联的链路追踪数据 --- ### 指标存储与查询优化 **存储后端**: - **Elasticsearch**:默认存储引擎,适合高吞吐量场景(需优化分片策略)[^5] - **MySQL/TiDB**:适用于小规模部署或强事务需求场景 **查询技巧**: ```sql -- 查询耗时最高的端点(OAL 查询语言) SELECT avg(response_time) FROM endpoint_traces WHERE service = 'payment-service' GROUP BY endpoint ORDER BY avg(response_time) DESC LIMIT 5 ``` --- ### 实际应用场景示例 1. **故障根因分析**: - 现象:`order-service` 的 P99 延迟突增 - 分析步骤: - 查看 `order-service` 的 `endpoint_percentile` 确定慢接口 - 通过 TraceID 定位到关联的 `payment-gateway` 数据库慢查询 - 检查对应主机的 `node_disk_io_time` 确认磁盘瓶颈 2. **容量规划**: - 基于 `service_cpm` 预测流量增长趋势 - 结合 `jvm_heap_used` 调整 Kubernetes Pod 的 memory request/limit --- ### 与 Prometheus/ELK 的整合建议 1. **数据互补**: - 使用 SkyWalking 的细粒度 APM 指标 + Prometheus 的系统级指标 - 通过 `trace_id` 在 Kibana 中关联日志与监控数据[^1] 2. **存储优化**: - SkyWalking 原始采样数据保留 7 天 - 聚合指标(如每分钟统计值)长期存储到 Prometheus + Thanos ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值