微服务架构-链路追踪、日志收集篇
一、链路追踪
1、涉及的插件elasticsearch7.0.0、skywalking-oap-server:8.9.1、skywalking-ui:8.9.1、skywalking-agent 8.7.0
2、原理
3、实现
3.1、docker-command yml文件配置
version: '3'
services:elasticsearch:image: elasticsearch:7.0.0container_name: elasticsearchrestart: alwaysports:- 9200:9200- 9300:9300environment:discovery.type: single-nodeTZ: Asia/Shanghaiskywalking-server:image: apache/skywalking-oap-server:8.9.1container_name: skywalking-serverdepends_on:- elasticsearchlinks:- elasticsearchrestart: alwaysports:- 11800:11800- 12800:12800environment:TZ: Asia/ShanghaiSW_STORAGE: elasticsearchSW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200volumes:- ./skywalking/alarm-settings.yml:/skywalking/config/alarm-settings.ymlskywalking-ui:image: apache/skywalking-ui:8.9.1container_name: skywalking-uidepends_on:- skywalking-serverlinks:- skywalking-serverrestart: alwaysports:- 8081:8080environment:SW_OAP_ADDRESS: http://skywalking-server:12800TZ: Asia/Shanghai
networks:monitor:driver: bridge
3.2、alarm-settings.yml 默认配置
rules:service_resp_time_rule:metrics-name: service_resp_timeop: ">"threshold: 1000period: 10count: 3silence-period: 5message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.service_sla_rule:metrics-name: service_slaop: "<"threshold: 8000period: 10count: 2silence-period: 3message: Successful rate of service {name} is lower than 80% in 2 minutes of last 10 minutesservice_resp_time_percentile_rule:metrics-name: service_percentileop: ">"threshold: 1000,1000,1000,1000,1000period: 10count: 3silence-period: 5message: Percentile response time of service {name} alarm in 3 minutes of last 10 minutes, due to more than one condition of p50 > 1000, p75 > 1000, p90 > 1000, p95 > 1000, p99 > 1000service_instance_resp_time_rule:metrics-name: service_instance_resp_timeop: ">"threshold: 1000period: 10count: 2silence-period: 5message: Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutesdatabase_access_resp_time_rule:metrics-name: database_access_resp_timethreshold: 1000op: ">"period: 10count: 2message: Response time of database access {name} is more than 1000ms in 2 minutes of last 10 minutesendpoint_relation_resp_time_rule:metrics-name: endpoint_relation_resp_timethreshold: 1000op: ">"period: 10count: 2message: Response time of endpoint relation {name} is more than 1000ms in 2 minutes of last 10 minutes
webhooks:
3.3、idea添加vm参数配置启动
-javaagent:H:\space\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-DSW_AGENT_NAME=film-server
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.1.9:11800
3.4、效果:链路、vm等查看
二、elk标准日志收集
1、涉及的技术栈:elasticsearch、logstash、kibana、kafka、zookeeper
2、原理
3、服务器实现
3.1、docker-command的yml配置
version: '3'
services:elasticsearch:image: elasticsearch:7.0.0container_name: elasticsearchrestart: alwaysports:- 9200:9200- 9300:9300environment:discovery.type: single-nodeTZ: Asia/Shanghaikibana:image: kibana:7.0.0container_name: kibanaports:- 5601:5601depends_on:- elasticsearchlinks:- elasticsearch:esenvironment:- "elasticsearch.hosts=http://es:9200"restart: alwayslogstash:image: logstash:6.4.0container_name: logstashvolumes:- ./logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.confdepends_on:- elasticsearchlinks:- elasticsearch:esports:- 4560:4560kafka:image: wurstmeister/kafkaports:- "9092:9092"environment:KAFKA_ADVERTISED_HOST_NAME: 192.168.1.9KAFKA_CREATE_TOPICS: "test:1:1"KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181volumes:- /var/run/docker.sock:/var/run/docker.sockports:- 6379:6379zookeeper:image: zookeeper:3.5ports:- 2181:2181 volumes:- ./zookeeper/data:/zk/data- ./zookeeper/conf:/zk/conf
networks:monitor:driver: bridge
3.2、logstash.conf基本配置
input { #logstash直接收集日志的tcp端口tcp {mode => "server"host => "0.0.0.0"port => 4560codec => json_lines}
}
output { #logstash将收集到的日志发送到es里存储elasticsearch {hosts => "es:9200"index => "springboot-logstash-%{+YYYY.MM.dd}"}
}
3.3、logstash安装插件
[root@anonymous dev]# docker exec -it logstash /bin/bash
bash-4.2$ cd /bin/
bash-4.2$ logstash-plugin install logstash-codec-json_lines
bash-4.2$ exit
[root@anonymous dev]# docker restart logstash
4、微服务配置
4.1、导入pom依赖
<!--集成logstash--><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>5.3</version></dependency>
4.2、在resources新增xml配置并重启微服务
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration><include resource="org/springframework/boot/logging/logback/defaults.xml"/><include resource="org/springframework/boot/logging/logback/console-appender.xml"/><!--应用名称--><property name="APP_NAME" value="common-ser"/><!--日志文件保存路径--><property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/><contextName>${APP_NAME}</contextName><!--每天记录日志到文件appender--><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder></appender><!--输出到logstash的appender--><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--可以访问的logstash日志收集端口--><destination>192.168.1.9:4560</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/></appender><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/><appender-ref ref="LOGSTASH"/></root>
</configuration>
4.3、打开kibaba( 我的本地地址是http://192.168.1.9:5601/)配置,选择@timestamp完成
4.4、利用sentinel限流异常制造点日志
三、高并发场景日志收集升级
1、将服务器logstash.conf中的input的tcp修改为
kafka {id => "kafka_input_9527" #随便写bootstrap_servers => "192.168.1.9:9092"topics => ["test"]auto_offset_reset => "latest"}
2、修改微服务配置
2.1、新增pom依赖
<dependency><groupId>com.github.danielwegener</groupId><artifactId>logback-kafka-appender</artifactId><version>0.2.0-RC2</version>
</dependency>
2.2、将resources-->xml 中 logstash的appender替换成kafka的appender
<!--输出到kafka的appender--><appender name="KAFKA" class="com.github.danielwegener.logback.kafka.KafkaAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder><topic>test</topic><!-- 不关心key的分区策略 --><keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy" /><!-- 异步发送消息,不会阻塞应用程序 --><deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" /><producerConfig>bootstrap.servers=192.168.1.9:9092</producerConfig><!-- 不需要等待kafka的ack确认,对于日志数据一般都选这种,可能会丢一点日志,但是关系不大 --><producerConfig>acks=0</producerConfig><!-- 如果kafka挂了,日志会发送到console上 --><appender-ref ref="CONSOLE"/> </appender>
2.3、改后的效果参考
微服务架构-链路追踪、日志收集篇相关推荐
- 微服务架构--链路追踪(Nginx篇)
阅读提示:本文不提供链路追踪的完整解决方案,只提供Nginx层对链路追踪的支持方案! 1 背景介绍 微服务的诞生,解决了传统单体应用的很多问题,如可维护性差.扩展性差和灵活性差等问题(粗粒比较).微服 ...
- cx_oracle写日志信息_浅谈微服务架构之构建日志收集系统
任何复杂的应用程序偶尔都会出现错误.在微服务应用程序中,需要跟踪几十甚至几百个服务发生的情况.要获取系统的整体视图,日志记录和监控至关重要.在微服务架构中,一个业务请求会经历多个服务,收集端到端链路上 ...
- SpringCloud微服务-----skywalking链路追踪
微服务架构已经是一个很通用的系统架构,常见的技术栈如下图所示,这张架构图基本涵括了当前微服务体系下的各种技术栈,可能不同的技术栈有不同的开源实现. 链路追踪介绍 对于一个大型的几十个,几百个微服务构成 ...
- Sleuth + Zipkin 微服务分布式链路追踪
在开发环境中对业务问题的排查可以debugger计算时差等问题进行处理,如果架构复杂微服务嗲用众多,这样的方式就显得鸡肋. 如何快速发现问题? 如何判断故障影响范围? 如何梳理服务依赖以及依赖的合理性 ...
- 微服务架构开发实战日志与监控:微服务日志管理将面临的挑战
微服务的日志与监控:微服务日志管理将面临的挑战 日志来自正在运行的进程的事件流.对于传统的JavaEE应用程序而言,有许多框架和库可用于日志记录.Java Logging (JUL)是Java自身所提 ...
- 《自学SpringCloud微服务架构》之第 1 篇 —— 微服务的自我修养
序言: 我们先看看2019年中国首富排行榜.嗯,99%的财富掌握在1%的人手里.没错的,这个时代,是富豪们玩转手里的棋子的时代,而我们都是看客.本人已毕业四年,却还是一如既往的做着毕业生都能做的敲代码 ...
- 【微服务】链路追踪 jaeger
最近做了一点traces相关的工作,看了关于jaeger的一些内容,来水一篇.(艰难地保持着一月一篇) 为什么需要链路追踪 随着应用的发展,分布式是不可避免的趋势,无论是随着业务的复杂庞大由单体应用拆 ...
- 微服务的链路追踪和流量可视化-钉钉告警
skywalking简介 文章目录 skywalking简介 前言 一.安装 二进制安装 Skywalking:告警功能 前言 目前skywalking主要是做链路追踪和微服务流量可视化.skywal ...
- 基SkyWalking实现对k8s集群中微服务的链路追踪
1.思路如下: 1.sykwalking的安装配置(k8s集群部署配置) 2.sykwalking-agent探针的集成到微服务项目(是打成基础镜像里,然后指定参数(configMap中配置java项 ...
最新文章
- [caffe解读] caffe从数学公式到代码实现3-shape相关类
- 插入排序、选择排序、快速排序以及归并排序(附Python代码)
- 为什么先交钱后用电_适合痘痘痘印的好的护肤品,为什么要先清洁后祛痘!_新闻中心...
- C#基础(201)--常量枚举
- 利用saopanel系统的UDP转发模式破解校园网
- Java学习笔录3(变量和常量)
- 苹果恢复出厂设置系统也会还原吗_刷机、恢复出厂设置和还原设置,你还不知道有什么区别?...
- Go语言学习查缺补漏ing Day1
- iOS-获取健康运动步数
- Asp.Net 上传图片并生成高清晰缩略图
- 云测试 入门 笔记
- 程序员《周易》入门一
- pdf怎么压缩文件到最小?如何将pdf文档怎么压缩最小?软件工具在线网站哪个好?
- 当面试官问你“我为什么要聘用你”
- 暨南大学计算机技术复试名单复试,关于2020年暨南大学硕士生复试资格线及复试名单的通知来...
- 杰奇linux伪静态,nginx 杰奇 nginx 伪静态规则
- 历年真题 九宫重排(BFS)
- Win7资源管理器有哪些打开方式?
- 二十八、用MOS管设计74HC148芯片
- 电子计算机 隐形眼镜,计算机科学 | 能随时监测眼压的智能隐形眼镜
热门文章
- 跟原力一起玩转EOS源码-Push Transaction机制
- rgbdslam流程简单实现
- 电信运营商需要鲲鹏生产力
- Nordic 发布新一代多协议系统级芯片 nRF5340,基于 Arm Cortex-M33 双处理器硬件架构
- 芯进电子已量产第二代霍尔电流传感器,量程5A~100A
- 论坛推广实战 | 精品帖持续不断引流赚钱?
- QQrobot -- 基于Python的智能推送助手
- WOJ 1006-Language of Animals解题心得
- Kinect C++简单切水果的一点总结
- a卡 n卡 html5性能,装机之家显卡天梯图2019年12月 独显A卡和N卡性能排行一目了然...