程序员程序园

springboot1.5.x与自建的应用层APM系统落地实践

2019-04-29  本文已影响76人  慢黑八

简书 慢黑八
转载请注明原创出处,谢谢!
如果读完觉得有收获的话,欢迎点赞加关注

APM

【概念篇】应用程序微服务化之后,我们想看到整个微服务的集群,上下游系统,服务依赖关系、流量分布、外部边界等内容。所以,监控(可观察性)是应用系统微服务化之后提出的一项基础性需求。今天,我们就来聊聊微服务监控(APM)的那些事。

采用系统分层的思想可视化监控分析可以分为3个层次

接下来我们就来说说如何对 "应用层进行监控分析" ,先看下下面三个概念

所以,我们自建的APM系统,采用如下解决方案收集日志、指标、追踪3个维度的数据:

图1

【实践篇】 针对现有springboot1.5.x应用环境,与我们自建的apm系统进行整合。

一、现有环境

1、应用系统

springboot1.5 + JDK1.8等

2、APM系统

参见图1中的APM系统,包含elk6.7.1、grafana、Prometheus、tsdb、kafka、zipkinserver等
kibana   http://test.tech.**bank.com/kibana/ 用户名:onec***_dev 密码:**bank
zipkinui  http://test.tech.**bank.com/zipkin/

二、基于现有spring1.5.x 环境改造

1、追踪:使用spring-cloud-sleuth通过kafka传输zipkin链路数据到zipkinServer:

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
 <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
</dependency>
application.name: your_application
spring.kafka.producer.bootstrap-servers=ip:port
spring.kafka.producer.compression-type=gzip
spring.kafka.producer.acks=all
spring.kafka.producer.retries=3
spring.kafka.producer.batch-size=1048576
spring.kafka.producer.buffer-memory=6291456
spring.sleuth.sampler.percentage=1.0
spring.zipkin.sender.type=kafka
spring.zipkin.compression.enabled=true
spring.zipkin.service.name=your_application
spring.zipkin.message-timeout=1

2、日志:使用filebeat,收集json格式的log4j日志,通过kafka,logstash处理后存储至elastic search存储中,另外在日志中输出tracid、spanid、parentid等信息。

<!--以下是Properties中的改造-->
<Property name="PROJECT_NAME">your_application</Property>
<property name="LOG_PATH" value="/path/to" />
<property name="MAX_FILE_SIZE" value="1000MB" />

<!--以下是appenders中的改造-->
<RollingRandomAccessFile name="ALLJSON_LOG"
    fileName="${LOG_PATH}/alljson.log"
    filePattern="${LOG_PATH}/alljson-%d{yyyyMMdd-HHmmss.SSS}.log">
    <JSONLayout charset="UTF-8" locationInfo="true"
            properties="true" complete="false" compact="true" eventEol="true"
            propertiesAsList="false" includeStacktrace="true">
    <KeyValuePair key="serviceName" value="${PROJECT_NAME}" />
    </JSONLayout>
    <Policies>
        <!--当日志大小达到1000MB时,以上述filePattern定义的格式进行打包压缩 -->
        <SizeBasedTriggeringPolicy
            size="${MAX_FILE_SIZE}" />
    </Policies>
    <DefaultRolloverStrategy max="10" /><!--压缩包数量不超过10 -->
</RollingRandomAccessFile>

<Async name="ASYNC_ALLJSON_LOG" bufferSize="262144">
    <AppenderRef ref="ALLJSON_LOG" />
</Async>

<!--以下是Loggers中的改造-->
<root level="${LOG_ROOT_LEVEL}">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="ASYNC_ALLJSON_LOG"/>
</root>
<!--  引入log4j2依赖   -->
<dependency>
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-log4j2</artifactId>  
</dependency> 
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.11.2</version>
</dependency> 
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.11.2</version>
</dependency> 
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.11.2</version>
</dependency>
1、下载filebeat  wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.7.1-linux-x86_64.tar.gz
2、解压tar -xvf  filebeat-6.7.1-linux-x86_64.tar.gz
3、进入 filebeat-6.7.1-linux-x86_64目录配置filebeat.yml文件
- type: log
  # Change to true to enable this input configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    #- /app/onecard-canary-service/logs/info.log
    - /path/to/alljson.log

output.kafka:
  enabled: true
  hosts: ["IP:PORT"]
  topic: 'topic.name'
  partition.hash:
    reachable_only: true
  compression: gzip
  max_message_bytes: 1000000
  required_acks: 1

4、执行命令,运行filebeat:  nohup ./filebeat -e -c filebeat.yml &
<property name="LOG_PATTERN"
            value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}]
            %c{36} [%line] - %msg%n" />

%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId},%X{X-Span-Export}就是traceid、spanid、parentid的相关信息

3、指标:

未完、待续....
上一篇 下一篇

猜你喜欢

热点阅读