在kubernetes中部署企业级ELK并使用其APM( 四 )


RUN wget -O /apm-agent.jar 完整的 Dockerfile 文件如下所示:
FROM openjdk:8-jdk-alpineENV ELASTIC_APM_VERSION "1.8.0"RUN wget -O /apm-agent.jar $ELASTIC_APM_VERSION/elastic-apm-agent-$ELASTIC_APM_VERSION.jarCOPY target/spring-boot-simple.jar /app.jarCMD java -jar /app.jar然后需要在示例应用中添加上如下依赖关系 , 这样我们就可以集成 open-tracing 的依赖库或者使用 Elastic APM API 手动检测 。
co.elastic.apmapm-agent-api${elastic-apm.version}co.elastic.apmapm-opentracing${elastic-apm.version}io.opentracing.contribopentracing-spring-cloud-mongo-starter${opentracing-spring-cloud.version}然后部署一个示例代码 , 用于验证 。 (1)、先部署mongo , yaml清单如下:
---apiVersion: v1kind: Servicemetadata:name: mongonamespace: elasticlabels:app: mongospec:ports:- port: 27017protocol: TCPselector:app: mongo---apiVersion: apps/v1kind: StatefulSetmetadata:namespace: elasticname: mongolabels:app: mongospec:serviceName: "mongo"selector:matchLabels:app: mongotemplate:metadata:labels:app: mongospec:containers:- name: mongoimage: mongoports:- containerPort: 27017(2)、部署java应用 , yaml清单如下:
---apiVersion: v1kind: Servicemetadata:namespace: elasticname: spring-boot-simplelabels:app: spring-boot-simplespec:type: NodePortports:- port: 8080protocol: TCPselector:app: spring-boot-simple---apiVersion: apps/v1kind: Deploymentmetadata:namespace: elasticname: spring-boot-simplelabels:app: spring-boot-simplespec:selector:matchLabels:app: spring-boot-simpletemplate:metadata:labels:app: spring-boot-simplespec:containers:- image: gjeanmart/spring-boot-simple:0.0.1-SNAPSHOTimagePullPolicy: Alwaysname: spring-boot-simplecommand:- "java"- "-javaagent:/apm-agent.jar"- "-Delastic.apm.active=$(ELASTIC_APM_ACTIVE)"- "-Delastic.apm.server_urls=$(ELASTIC_APM_SERVER)"- "-Delastic.apm.service_name=spring-boot-simple"- "-jar"- "app.jar"env:- name: SPRING_DATA_MONGODB_HOSTvalue: mongo- name: ELASTIC_APM_ACTIVEvalue: "true"- name: ELASTIC_APM_SERVERvalue:ports:- containerPort: 8080---部署后观察pod的状态是否变为running 。
# kubectl get pod -n elastic NAMEREADYSTATUSRESTARTSAGEapm-server-667bfc5cff-7vqsd1/1Running034melasticsearch-client-f79cf4f7b-pbz9d1/1Running03h30melasticsearch-data-01/1Running03h33melasticsearch-master-77d5d6c9db-gklgd1/1Running03h36melasticsearch-master-77d5d6c9db-gvhcb1/1Running03h36melasticsearch-master-77d5d6c9db-pflz61/1Running03h36mkibana-6b9947fccb-4vp291/1Running03h3mmongo-01/1Running011mspring-boot-simple-fb5564885-rvh6q1/1Running080s测试应用 。
# curl -X GET 172.17.100.50:30809Greetings from Spring Boot!# 获取所有发布的 messages 数据:# curl -X GET 172.17.100.50:30809/message# 使用 sleep= 来模拟慢请求:# curl -X GET 172.17.100.50:30809/message?sleep=3000# 使用 error=true 来触发一异常:# curl -X GET 172.17.100.50:30809/message?error=true然后我们可以在kibane的APM页面看到应用以及其数据了 。
在kubernetes中部署企业级ELK并使用其APM文章插图
点击应用可以查看其性能追踪 。
在kubernetes中部署企业级ELK并使用其APM文章插图
点击错误 , 可以查看错误数据 。
在kubernetes中部署企业级ELK并使用其APM文章插图
而且还可以查到详细的错误信息 。
在kubernetes中部署企业级ELK并使用其APM文章插图
还可以查看JVM的数据监控 。
在kubernetes中部署企业级ELK并使用其APM文章插图
可以查看一些详细的数据 。
在kubernetes中部署企业级ELK并使用其APM文章插图