日志收集和链路追踪:skywalking

如果能跟踪每个请求,中间请求经过哪些微服务,请求耗时,网络延迟,业务逻辑耗时等。我们就能更好地分析系统瓶颈、解决系统问题,因此链路跟踪很重要。

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

skywalking介绍

国人开源的产品,主要开发人员来自于华为,2019年SkyWalking加入Apache成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持h2、Mysql、Elasticsearch等。采用字节码注入的方式实现无代码侵入,功能全面,性能优秀,且对云原生支持,目前增长势头强劲,社区活跃,其链路追踪,性能监控,日志收集、告警等功能被开发者广泛使用,遗憾中文文档很少,使用不便。
介绍参考:https://www.jianshu.com/p/ffa7ddcda4ab
官网:https://skywalking.apache.org
github:https://github.com/apache/skywalking
中文文档:https://skyapm.github.io/document-cn-translation-of-skywalking/

前言

网上很多文档不全,踩了很多坑。
本指南为单机安装,安装的系统为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/downloads/https://archive.apache.org/dist/skywalking/

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/lizz861109/article/details/114578826

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文件中的路径(下图标红的)。


11.jpg

1.2.2 配置文件

下载地址:https://pan.baidu.com/s/1rlfkpjKVbRoSTL_uKeNQ4Q?pwd=jghs
或者自己编写:
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分钟,出现如下界面,说明成功。

12.jpg

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才能产生数据。
有数据效果如下图:


18.jpg

先下载探针并解压:https://archive.apache.org/dist/skywalking/java-agent/
下载8.9.0版本跟服务端版本要保持一直。

13.jpg

这里介绍关于Java探针使用三种常用方式
不管哪种方式都需要在你的启动指令中加入以下内容:

-javaagent:你的探针绝对路径\skywalking-agent.jar -Dskywalking.agent.service_name=你的服务名称 -Dskywalking.collector.backend_service=ip:11800

注意:你自己的服务jar包一定要放到最后;ip端口是你的skywalking后台上传数据的ip端口;其中的skywalking-agent.jar路径,服务名,ip端口都要以你的实际为准(下图标红的)。


16.jpg

2.1 方式一:IDEA使用探针

idea中配置示例:


15.jpg

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 有几种情况:


17.jpg

容器部署的,比如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基本上都能见名知意,改变后,客户端服务重启生效。


    19.jpg

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,312评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,578评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,337评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,134评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,161评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,303评论 1 280
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,761评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,421评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,609评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,450评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,504评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,194评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,760评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,836评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,066评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,612评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,178评论 2 341

推荐阅读更多精彩内容