乐趣区

关于java:日志收集和链路追踪skywalking

如果能跟踪每个申请,两头申请通过哪些微服务,申请耗时,网络提早,业务逻辑耗时等。咱们就能更好地剖析零碎瓶颈、解决零碎问题,因而链路跟踪很重要。

想在无代码入侵前提下实现:
查看服务之间链路调用关系;
把各个微服务扩散的日志收集起来;
监控剖析零碎状况;
用 SkyWalking 吧,它不会让你悲观。

skywalking 介绍

国人开源的产品,次要开发人员来自于华为,2019 年 SkyWalking 退出 Apache 成为顶级我的项目,反对 Java、.Net、NodeJs 等探针,数据存储反对 h2、Mysql、Elasticsearch 等。采纳字节码注入的形式实现无代码侵入,性能全面,性能优良,且对云原生反对,目前增长势头强劲,社区沉闷,其链路追踪,性能监控,日志收集、告警等性能被开发者宽泛应用,遗憾中文文档很少,应用不便。
介绍参考:https://www.jianshu.com/p/ffa…
官网:https://skywalking.apache.org
github:https://github.com/apache/sky…
中文文档:https://skyapm.github.io/docu…

前言

网上很多文档不全,踩了很多坑。
本指南为单机装置,装置的零碎为 centos7.6。
确保服务器通外网。
装置波及到的版本:
存储:elasticsearch 7.10.2
服务端:skywalking-oap-server 8.9.0
前端界面:skywalking-ui 8.9.0
探针:skywalking-agent 8.9.0
不倡议太低版本,性能不全。

1. 装置

这里介绍单价压缩包装置和单机 docker 装置

1.1 单机压缩包装置

1.1.1 下载

地址:http://skywalking.apache.org/… 或 https://archive.apache.org/di…

1.1.2 解压

tar -zxvf apache-skywalking-apm-8.9.0.tar.gz

1.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 目录下,sh startup.sh 即可。
拜访 http://ip:8080 看到页面胜利。

1.2 单机 docker-compose 装置

确保零碎曾经装置 docker 和 docker-compose。

1.2.1 创立目录

创立目录:mkdir /home/elasticsearch/data
这个目录是寄存 es 数据的中央,不肯定是 home 下,只不过我的 home 下存储空间较多,倡议你也放到存储空间较大的目录下,然而千万记得要同步批改上面 skywalking-docker-compose_3.3.yaml 文件中的门路(下图标红的)。

1.2.2 配置文件

下载地址:https://pan.baidu.com/s/1rlfk…
或者本人编写:
mkdir /usr/local/skywalking
cd /usr/local/skywalking
vim skywalking-docker-compose_3.3.yaml
复制粘贴以下内容

version: '3.3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
    environment:
      - "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/data
    ulimits:
      memlock:
        soft: -1
        hard: -1
  skywalking-oap-server:
    image: apache/skywalking-oap-server:8.9.0
    container_name: skywalking-oap-server
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      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/Shanghai
  skywalking-ui:
    image: apache/skywalking-ui:8.9.0
    container_name: skywalking-ui
    depends_on:
      - skywalking-oap-server
    links:
      - skywalking-oap-server
    restart: always
    ports:
      - 8080:8080
    environment:
      SW_OAP_ADDRESS: http://skywalking-oap-server:12800
      TZ: Asia/Shanghai

1.2.3 启动

在下面配置文件同级目录下执行命令:
docker-compose -f skywalking-docker-compose_3.3.yaml up -d
期待几分钟呈现上面提醒阐明胜利
*Starting elasticsearch … done
Recreating skywalking-oap-server … done
Recreating skywalking-ui … done*

1.2.4 拜访

http://ip:8080
第一次启动页面加载较慢,期待 1 - 3 分钟,呈现如下界面,阐明胜利。

1.2.5 注意事项

1、skywalking-docker-compose_3.3.yaml 配置文件中的 端口都是能够批改的,如果默认端口有抵触,请批改端口,并且确认新端口可用。
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 -f skywalking-docker-compose_3.3.yaml stop
启动:docker-compose -f skywalking-docker-compose_3.3.yaml up -d

2. 应用

在下面服务端装置好了当前,还须要客户端联合探针 skywalking-agent 能力产生数据。
有数据成果如下图:

先下载探针并解压: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 中配置示例:

2.2 形式二:jar 包形式应用探针

用 java -jar 或者 nohup 或者用脚本启动,示例:
java -javaagent:/home/skywalking/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=admin -Dskywalking.collector.backend_service=192.168.99:11800 -jar admin.jar &

2.3 形式三:docker 形式应用探针

批改你的 Dockerfile 文件,
退出两行:
COPY skywalking-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.docker COPY 只能复制同级目录下的文件,所以,肯定要把探针放到 Dockerfile 所在目录下。
2.skywalking-agent 肯定是整个文件夹里,不仅仅是 skywalking-agent.jar。
3.-javaagent: 后的门路为 docker 容器的外部门路。
4.-Dskywalking.collector.backend_service 后的 ip 有几种状况:

容器部署的,比方 docker,127.0.0.1 只是容器内无效,不能代表宿主机本机,所以即便在同一台机器也不能写 127.0.0.1,能够试试,是不通的。
172.17.0.1 这个 ip 是 docker 默认虚构网卡的网关 ip,通过这个 ip, 申请能够达到宿主机,当然写理论的物理 ip 也是能够的,然而思考到很多我的项目是交付性的,skywalking 的地址总是不同,都要改挺麻烦的,写 172.17.0.1 就通用了,前提是在同一台机器哦。

3. 结尾

  1. 下面波及到 skywalking 的一些配置,都是通过传参的形式,其实在 skywalking 和探针文件夹上面的配置文件都是批改的,然而比拟死板,不灵便。具体操作能够自行搜寻文档,这里不再赘述。
  2. skywalking 收集数据是异步的,不必放心影响本人服务性能,skywalking 占用资源很小,单机性能很强,放心使用,如果单机不能满足,能够思考集群形式,比方部署几台 skywalking 而后通过 haproxy 代理,配置放在 nacos 等,具体请自行搜寻计划。
  3. skywalking-agent 的目录下,optional-plugins 是可选追踪插件,plugins 是默认追踪插件,如果感觉默认的不够,没有涵盖到本人想要追踪的,能够复制 optional-plugins 外面的减少到 plugins,当然感觉有些不想看到也能够缩小插件,外面的 jar 基本上都能见名知意,扭转后,客户端服务重启失效。

同时须要做日志追踪请看这里:
https://www.jianshu.com/p/c93…

退出移动版