Elastic Stack应用性能监控APM初窥门径

tech2022-12-27  120

文章目录

什么是APMAPM的组成APM AgentsAPM ServerElasticsearchKibana APM快速开始安装APM ServerAPM Server 配置 docker快速安装

什么是APM

Elastic APM (application performance monitor)是一个应用性能监控系统,构建与Elastic Stack上(旧称ELK栈)。APM允许你去实时监控应用软件提供的服务,并会收集处理请求的响应时间,数据库查询,缓存调用,外部HTTP请求等详细的性能信息,这使得查明和修复性能问题更加快速。同时APM也会自动收集未处理的异常和错误,在收集异常时异常基于栈追踪进行异常分组,因此你能够辨识新的异常出现,并能观察到异常特定异常的出现次数。

Metrics是另一个在生产环境下调试过程中重要的源信息,APM代理自动选取基础的主机级别指标和代理的指标,例如在Java Agent下JVM的指标,在Go Agent里Go runtime的指标。

Elastic APM is an application performance monitoring system built on the Elastic Stack. It allows you to monitor software services and applications in real time — collect detailed performance information on response time for incoming requests, database queries, calls to caches, external HTTP requests, and more. This makes it easy to pinpoint and fix performance problems quickly.Elastic APM also automatically collects unhandled errors and exceptions. Errors are grouped based primarily on the stacktrace, so you can identify new errors as they appear and keep an eye on how many times specific errors happen.Metrics are another important source of information when debugging production systems. Elastic APM agents automatically pick up basic host-level metrics and agent specific metrics, like JVM metrics in the Java Agent, and Go runtime metrics in the Go Agent.

APM的组成

Elastic APM 因为是基于Elastic Stack构建的,因此常规来说分为四个部分 APM Agents, APM Server, Elasticsearch, Kibana,接下来我们会分别对这四个组件(component)进行介绍,系统架构如下图:

APM Agents

APM agents 是与你的应用服务是同一种语言写的开源库,你可能只会使用一个,或者是全部语言的APM agents,您可以安装APM agents类库就想安装其他类库一样。APM agents会在运行时检测你的代码并收集性能数据和异常,这些数据会被短暂缓存发送到APM Server组件上。

APM agents分类有如下:

Go agentJava agent.NET agentNode.js agentPython agentRuby agentJavaScript Real User Monitoring (RUM) agent

APM agents 拥有自动仪器支持的技术,并会记录其关注的事件,例如数据库查询和传入 HTTP 请求的事务范围,为此,它利用 JVM 检测类的字节码的能力,这意味着对于接受支持的技术,不需要更改代码。

默认情况下,每个传入一个 HTTP 请求,代码作用域的时间跨度(spans)在整个事务中是被分组的,不过也可以创建与 HTTP 请求不关联的自定义事务。事务和代码作用域范围将发送到 APM 服务器,在那里它们转换为适合 Elasticsearch 的格式,然后您可以使用 Kibana 中的 APM 应用深入了解应用程序中的延迟问题和错误罪魁祸首。

事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。

APM Server

APM Server 是一个开源的应用,用于接收来自你APM agents发送的数据,它在设计时故意将其分离出一个组件,这样有助于保持代理的轻量级,并且能够有效防止一些安全风险,并能提高在 Elastic Stack 的兼容性。在APM Server处理和验证来自APM agents的事件后,APM Server将数据转换为Elasticsearcch中的文档,并存储这些文档在Elasticsearch的索引中,在几秒之内你就可以在Kibana的APM应用模块查看你的应用程序性能数据。APM的参考文档提供了你的一切需要,包括安装,配置,安全,监控等诸类需求。Agents 与 APM 兼容性点击此处

Elasticsearch

Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速、实时地存储、搜索和分析大量数据。Elasticsearch用于存储 APM 性能指标并利用其聚合。

Kibana

Kibana 是一个开源分析和可视化平台,旨在与 Elasticsearch 一起使用。您可以使用 Kibana 搜索、查看和与存储在弹性搜索中的数据进行交互。 由于应用程序性能监视是所有关于可视化数据和检测瓶颈,因此了解如何在 Kibana 中使用 APM 应用程序至关重要。以下各节将帮助您入门

APM快速开始

如果你想要安装自己的 Elastic Stack 可以先查看 Elastic 产品支持版本的矩阵,可以事先了解其不同产品与操作系统的兼容性。我们推荐你使用与 Elasticsearch, Kibana, and APM Server 同一个版本号。 We recommend you use the same version of Elasticsearch, Kibana, and APM Server.

安装APM Server

# deb安装 curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.9.0-amd64.deb sudo dpkg -i apm-server-7.9.0-amd64.deb # RPM二进制安装 curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.9.0-x86_64.rpm sudo rpm -vi apm-server-7.9.0-x86_64.rpm # 解压缩包安装 curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.9.0-linux-x86_64.tar.gz tar xzvf apm-server-7.9.0-linux-x86_64.tar.gz # Mac系统安装 curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.9.0-darwin-x86_64.tar.gz tar xzvf apm-server-7.9.0-darwin-x86_64.tar.gz

APM Server 配置

docker快速安装

version: '2.2' services: apm-server: image: docker.elastic.co/apm/apm-server:7.9.0 depends_on: elasticsearch: condition: service_healthy kibana: condition: service_healthy cap_add: ["CHOWN", "DAC_OVERRIDE", "SETGID", "SETUID"] cap_drop: ["ALL"] ports: - 8200:8200 networks: - elastic command: > apm-server -e -E apm-server.rum.enabled=true -E setup.kibana.host=kibana:5601 -E setup.template.settings.index.number_of_replicas=0 -E apm-server.kibana.enabled=true -E apm-server.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["elasticsearch:9200"] healthcheck: interval: 10s retries: 12 test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:8200/ elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.9.0 environment: - bootstrap.memory_lock=true - cluster.name=docker-cluster - cluster.routing.allocation.disk.threshold_enabled=false - discovery.type=single-node - ES_JAVA_OPTS=-XX:UseAVX=2 -Xms1g -Xmx1g ulimits: memlock: hard: -1 soft: -1 volumes: - esdata:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - elastic healthcheck: interval: 20s retries: 10 test: curl -s http://localhost:9200/_cluster/health | grep -vq '"status":"red"' kibana: image: docker.elastic.co/kibana/kibana:7.9.0 depends_on: elasticsearch: condition: service_healthy environment: ELASTICSEARCH_URL: http://elasticsearch:9200 ELASTICSEARCH_HOSTS: http://elasticsearch:9200 ports: - 5601:5601 networks: - elastic healthcheck: interval: 10s retries: 20 test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:5601/api/status volumes: esdata: driver: local networks: elastic: driver: bridge

执行 docker-compose up docker-compose将会下载官方docker镜像,并运行 Elasticsearch, Kibana, and APM Server.

最新回复(0)