当前位置: 首页 > 后端技术 > Java

日志采集和链路追踪:如果skywalking

时间:2023-04-02 09:45:10 Java

能够追踪到每一个请求,中间请求经过了哪些微服务,请求耗时,网络延迟,业务逻辑耗时等,我们可以更好的分析系统瓶颈,解决系统问题,因此链接跟踪非常重要。我想在没有代码侵入的情况下实现:查看服务之间的链接调用关系;收集各种微服务的零散日志;监控和分析系统状况;使用SkyWalking,它不会让你失望。skywalking介绍国人的开源产品。主要开发人员来自华为。2019年,SkyWalking加入Apache,成为顶级项目。支持Java、.Net、NodeJs等多种探针,数据存储支持h2、Mysql、Elasticsearch等。利用字节码注入实现无代码入侵,功能全面,性能卓越,支持云原生,目前增长势头强劲功能强大,社区活跃,其链路跟踪、性能监控、日志收集、告警等功能被开发者广泛使用。可惜中文文档少,使用不方便。介绍参考:https://www.jianshu.com/p/ffa...官网:https://skywalking.apache.orggithub:https://github.com/apache/sky...中文文档:https://skyapm.github.io/docu...前言网上有很多不完整的文档,也踩过很多坑。本指南为单机安装,安装的系统为centos7.6。确保服务器连接到外部网络。安装涉及的版本:存储:elasticsearch7.10.2服务器:skywalking-oap-server8.9.0前端界面:skywalking-ui8.9.0探针:skywalking-agent8.9.0不建议太低版本,而且功能还不完善。1.安装这里介绍单价压缩包安装和单机docker安装1.1单机压缩包安装1.1.1下载地址:http://skywalking.apache.org/...或https://archive.apache.org/di。..1.1.2解压tar-zxvfapache-skywalking-apm-8.9.0.tar.gz1.1.3修改配置确保以下端口可用:11800:与Skywalking通信的gRPC端口;12800:与Skywalking通信的HTTP端口;8080:UI占用的端口。如果端口被占用,编辑其config目录下的配置文件application.yml修改端口。详细配置:https://blog.csdn.net/lizz861...1.1.4存储推荐使用elasticsearch。安装方法请自行搜索。1.1.5开始进入其bin目录,shstartup.sh即可。访问http://ip:8080可以看到页面成功。1.2单机docker-compose安装确保系统已经安装了docker和docker-compose。1.2.1创建目录创建目录:mkdir/home/elasticsearch/data这个目录是存放es数据的地方,不一定在home下,但是我家的存储空间比较大,建议大家也放在大一点的存储中space目录,但记得同步修改下面skywalking-docker-compose_3.3.yaml文件中的路径(下图红色图标)。1.2.2配置文件下载地址:https://pan.baidu.com/s/1rlfk...或者自己写:mkdir/usr/local/skywalkingcd/usr/local/skywalkingvimskywalking-docker-compose_3.3。yaml复制并粘贴以下版本:'3.3'服务:elasticsearch:图像:docker.elastic.co/elasticsearch/elasticsearch:7.10.2container_name:elasticsearchrestart:alwaysports:-9200:9200environment:-"discovery.type=single-node"#以单机模式启动-"TZ=Asia/Shanghai"#设置时区-"bootstrap.memory_lock=true"#锁定物理内存地址,防止es内存被换出,即避免es使用swap交换分区和频繁交换,会导致更高的IOPS-"ES_JAVA_OPTS=-Xms1024m-Xmx1024m"#设置jvm内存大小volumes:-/home/elasticsearch/data:/usr/share/elasticsearch/dataulimits:内存锁:软:-1硬:-1skywalking-oap-server:图像:apache/skywalking-oap-server:8.9.0container_name:skywalking-oap-serverdepends_on:-elasticsearch链接:-elasticsearch重启:始终端口:-11800:11800-12800:12800environment:SW_CORE_RECORD_DATA_TTL:7#记录数据的有效期,单位天SW_CORE_METRICS_DATA_TTL:7#分析指标数据的有效期,单位天SW_STORAGE:elasticsearch#指定存储为es,该参数可以传给skywalking配置SW_STORAGE_ES_CLUSTER_NODES:elasticsearch:9200#指定es服务端口TZ:Asia/Shanghaiskywalking-ui:image:apache/skywalking-ui:8.9.0container_name:skywalking-uidepends_on:-skywalking-oap-serverlinks:-skywalking-oap-serverrestart:alwaysports:-8080:8080environment:SW_OAP_ADDRESS:http://skywalking-oap-server:12800TZ:Asia/Shanghai1.2.3start在与上述配置文件同级目录下执行命令:docker-compose-fskywalking-docker-compose_3.3.yamlup-d等待几分钟出现如下提示表示成功*Startingelasticsearch...doneRecreatingskywalking-oap-server...doneRecreatingskywalking-ui...done*1.2.4访问http://ip:8080第一个启动页加载缓慢,等待1-3分钟,出现如下界面,说明成功修改,如果默认端口冲突,请修改端口并确认新端口可用。2、如果http://ip:8080无法访问,很大概率是端口问题。可以先telnet,然后检查你的服务器有没有防火墙,有没有开放端口,或者有其他的网络限制。3、如果http://ip:8080可以访问,但显示不完整,请等待1-3分钟。如果还是显示不全,可能是后台或者es不可用。请检查/home/elasticsearch/data目录是否有足够权限,确保es对该目录有读写权限,否则会出现未知异常。此外,其他有自己定义或映射的目录也必须有足够的权限。4、数据存储时间SW_CORE_RECORD_DATA_TTL:7#记录数据的有效期,单位天SW_CORE_METRICS_DATA_TTL:7#分析指标数据的有效期,单位天根据实际需要修改,重启后生效。5.停止命令:docker-compose-fskywalking-docker-compose_3.3.yamlstop启动:docker-compose-fskywalking-docker-compose_3.3.yamlup-d2。服务端在上面安装好后,还需要客户端结合探针skywalking-agent生成数据。数据效果如下图:先下载probe并解压:https://archive.apache.org/di...下载8.9.0版本,保持服务器版本一致。以下是使用Java探测器的三种常见方式。无论哪种方式,您都需要在启动命令中添加以下内容:-javaagent:您的探针\skywalking-agent.jar的绝对路径-Dskywalking.agent.service_name=您的-Dskywalking.collector.backend_service=ip的服务名称:11800注意:自己的服务jar包一定要放在最后;ip端口是你skywalking后台上传数据的ip端口;skywalking-agent.jar的路径、服务名称和ip端口要根据自己的实际情况来定(下图红色图标)。2.1方法一:IDEA使用idea中的probe配置示例:2.2方法二:jar包方法使用probe以java-jar或nohup或script启动,示例:java-javaagent:/home/skywalking/skywalking-agent/skywalking-agent.jar-Dskywalking.agent.service_name=admin-Dskywalking.collector.backend_service=192.168.99:11800-jaradmin.jar&2.3方法三:docker方法使用探针修改你的Dockerfile,添加两行:COPYskywalking-agent/usr/local/agent"java-javaagent:/usr/local/agent/skywalking-agent.jar-Dskywalking.agent.service_name=admin-Dskywalking.collector.backend_service=172.17.0.1:11800下面是几个注意:1.dockerCOPY只能复制同目录下的文件,所以一定要把probe放在Dockerfile所在目录下2.skywalking-agent必须在整个文件夹里,不能只是skywalking-agent.jar。3.-javaagent:后面的路径是docker容器的内部路径4.-Dskywalking.collector.backend_service后面的ip有几种情况:容器部署,比如docker,127.0.0.1只在容器内有效cannotrepresentthehostmachineislocal,所以即使在同一台机器上也不能写127.0.0.1。您可以尝试一下,但它不起作用。172.17.0.1的ip是docker默认虚拟网卡的网关ip。通过这个ip,请求可以到达宿主机。当然写实际物理ip也是可以的,但是考虑到交付的项目很多,skywalking的地址总是不一样的,改起来比较麻烦。写172.17.0.1是通用的,前提是在同一台机器上。3.最后通过传参的方式传递一些skywalking相关的配置。其实skywalking和probe文件夹下的配置文件都是修改过的,只是比较死板,不灵活。具体操作可以自行搜索文档,这里不再赘述。Skywalking异步收集数据,因此您不必担心影响您的服务性能。Skywalking占用资源极少,单机性能强。您可以放心使用。如果单机不够,可以考虑集群,比如部署几个skywalking然后通过haproxy代理。在nacos等,请自行搜索解决方案。skywalking-agent目录下,optional-plugins为可选跟踪插件,plugins为默认跟踪插件。如果你觉得默认的不够用,没有覆盖你想追踪的东西,你可以复制optional-plugins,添加到plugins中。当然你觉得不想看的话也可以减少插件。里面的罐子基本都能看名字。修改后重启客户端服务生效。同时需要做日志跟踪,请看这里:https://segmentfault.com/a/11...