ES APM监控ESB平台
本系列文章概述使用Elastic APM工具对MuleSoft堆栈进行可观察性的工作,这是一个非常有效的解决方案,可为复杂的Mule和非Mule组件提供真正无缝的可观察性玻璃单窗格部署。
近年来,Mule逐渐普及,取代了其他 ESB 和集成技术。我总是向我自己解释这种现象,因为它具有快速集成系统和技术以自动化业务流程的能力。结果是形成了一个简单而轻便的集成层,不会像某些竞争对手那样使用户负担过多的操作问题,例如繁重的运行时管理层或专有的通信协议。尽管如此, 在本地,容器化环境或CloudHub中运行 Mule组件时 在许多环境中,客户往往不得不将集成层(双关语意味)与自己的定制管理和监视组件(年龄和质量各不相同)进行集成。这导致复杂的分布式环境在半光照条件下运行,通常会导致支持使用来自不足工具的不完整信息进行调试和解决问题。
本系列文章概述使用Elastic APM工具对MuleSoft堆栈进行可观察性的工作,这是一个非常有效的解决方案,可为复杂的Mule和非Mule组件提供真正无缝的可观察性玻璃单窗格部署。
Elastic APM
该 弹性堆叠,或ELK,如许多业内人士知道,由Elasticsearch,Logstash,Kibana,以及更多。Elastic Stack有多种用途,可广泛用于日志记录,监视,搜索,安全,分析和许多其他 用例。Elastic Stack的新增功能包括轻量级数据发送器或 Beats,以及 用于监视应用程序性能的Elastic APM。这篇文章是关于利用与Mule运行时集成的Elastic APM Java代理从Mule组件收集运行时事务性能和指标数据。我称为Mule APM代理的组件是我自己创建的,可以在 GitHub存储库中找到。它使用Mule PipelineMessageNotification以及MessageProcessorNotification事件和侦听器将Mule流和处理器的执行转换为相关的APM Transaction和Span对象。如果您对详细信息感兴趣,则代码位于存储库中。
首先,您将需要 Maven,如果您正在使用Mavenised Mule项目,则应该已经有了。下载链接到最新和最新版本的jar文件 ,并将其安装到本地Maven存储库中:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=co.elastic.apm
-DartifactId=apm-mule3-agent -Dversion=1.6.2 -Dpackaging=jar
将jar安装到本地存储库后,应在项目的pom.xml文件中将jar作为依赖项引用,如下所示。撰写本文时,该代理的最新版本为1.6.2,但请确保您检查 GitHub存储库 以获取较新版本:
<dependency>
<groupId>co.elastic.apm</groupId>
<artifactId>apm-mule3-agent</artifactId>
<version>1.6.2</version>
</dependency>
最后,在您的Mule配置文件中一次导入tracer.xml。一旦启动Mule,它将从tracer.xml加载所有相关的依赖项,并准备跟踪您的Mule流:
<spring:beans>
<spring:import resource="classpath:co/elastic/apm/mule/tracer.xml"/>
</spring:beans>
代理以与Mule完全相同的方式理解属性文件。如文档中所述,它使用Elastic Java APM代理属性 ,并根据README.md添加自己的属性来控制要跟踪的 内容。这是示例属性文件配置。请注意概述了与作为Elastic Cloud部署的一部分部署的APM服务器的连接的部分。附带说明一下,Elasticsearch Service标配512MB Elastic APM节点。
# Elastic Apm Java client properties
elastic.apm.log_level=DEBUG
elastic.apm.instrument=false
elastic.apm.active=true
# APM server running locally
elastic.apm.server_urls=http://localhost:8200
# Or, try APM on Elastic Cloud. Create trial deployment and update the below details
#elastic.apm.server_urls=https://xxxxxxxxxxxxxxxx.apm.ap-northeast-1.aws.cloud.es.io:443
#elastic.apm.secret_token=<secret_key>
elastic.apm.application_packages=
elastic.apm.service_name=component1
elastic.apm.service_version=v1.0.0
elastic.apm.stack_trace_limit=3
elastic.apm.span_frames_min_duration=0ms
# Mule apm specific properties
elastic.apm.mule.capture_input_properties=true
elastic.apm.mule.capture_input_properties_regex=http_(.*)
elastic.apm.mule.capture_output_properties=true
elastic.apm.mule.capture_output_properties_regex=(.*)
通常在Anypoint Studio中启动您的Mule项目 。如果您的APM代理配置正确,它将在日志文件中显示以下行:
[apm-server-healthcheck] INFO co.elastic.apm.agent.report.ApmServerHealthChecker - Elastic APM server is available: {"ok":{"build_date":"2019-04-02T14:55:26Z","build_sha":"5665711544eb3fcb956e7d1c61795e427bf97097","version":"6.7.1"}}
Mule 3.x支持将多个Mule项目的本地部署到一台Mule服务器中,并在它们之间共享某些配置,例如JDBC数据库或http侦听器。在这种情况下,可以使用对特定于域的跟踪器初始化的引用来对mule-domain-config.xml文件进行检测,因此不必单独检测部署为Mule域一部分的多个Mule项目。对于CloudHub或独立的Mule项目,该域的其余先决条件步骤,maven依赖关系和属性文件配置完全相同。
<spring:beans>
<spring:import resource="classpath:co/elastic/apm/mule/domain-tracer.xml" />
</spring:beans>