使用docker-compose 一键部署你的分布式调用链跟踪框架skywalking

  一旦你的程序docker化之后,你会遇到各种问题,比如原来采用的本地记日志的方式就不再方便了,虽然你可以挂载到宿主机,但你使用 --scale 的话,会导致 记录日志异常,所以最好的方式还是要做日志中心化,另一个问题,原来一个请求在一个进程中的痉挛失败,你可以在日志中巡查出调用堆栈,但是docker化之后, 原来一个进程的东西会拆成几个微服务,这时候最好就要有一个分布式的调用链跟踪,类似于wcf中的svctraceview工具。 一:搭建skywalking   gihub地址是:https://github.com/apache/incubator-skywalking 从文档中大概看的出来,大体分三个部分:存储,收集器,探针,存储这里就选用推荐的 elasticsearch。收集器准备和es部署在一起,探针就有各自语言的实现了,总之这里就有三个docker container: es,kibana,skywalking, 如果不用容器编排工具 的话就比较麻烦。 下面是本次搭建的一个目录结构: 1. elasticsearch.yml es的配置文件,不过这里有一个坑,就是一定要将 network.publish_host: 0.0.0.0 ,否则skywalking会连不上 9300端口。 复制代码 network.publish_host: 0.0.0.0 transport.tcp.port: 9300 network.host: 0.0.0.0 复制代码 2. elasticsearch.dockerfile 在up的时候,将这个es文件copy到 容器的config文件夹下。 复制代码 FROM elasticsearch:5.6.4 EXPOSE 9200 9300 COPY elasticsearch.yml /usr/share/elasticsearch/config/ 复制代码 3. application.yml skywalking的配置文件,这里也有一个坑:连接es的地址中,配置的 clustername一定要修改成和es的clustername保持一致,否则会连不上,这里容器之间用link 进行互联,所以es的ip改成elasticsearch就可以了,其他的ip改成0.0.0.0 。 View Code 4. skywalking.dockerfile 接下来就是 skywalking的 下载安装,使用dockerfile流程化。 复制代码 FROM centos:7 LABEL username="hxc@qq.com" WORKDIR /app RUN yum install -y wget && \ yum install -y java-1.8.0-openjdk ADD http://mirrors.hust.edu.cn/apache/incubator/skywalking/5.0.0-RC2/apache-skywalking-apm-incubating-5.0.0-RC2.tar.gz /app RUN tar -xf apache-skywalking-apm-incubating-5.0.0-RC2.tar.gz && \ mv apache-skywalking-apm-incubating skywalking RUN ls /app #copy文件 COPY application.yml /app/skywalking/config/application.yml WORKDIR /app/skywalking/bin USER root RUN echo "tail -f /dev/null" >> /app/skywalking/bin/startup.sh CMD ["/bin/sh","-c","/app/skywalking/bin/startup.sh" ] 复制代码 5. docker-compose.yml 最后就是将这三个容器进行编排,要注意的是,因为收集器会将数据放入到es中,所有一定要将es的data挂载到宿主机的大硬盘下,否则你的空间会不足的。 复制代码 version: '3.1' services: #elastic 镜像 elasticsearch: build: context: . dockerfile: elasticsearch.dockerfile # ports: # - "9200:9200" # - "9300:9300" volumes: - "/data/es2:/usr/share/elasticsearch/data" #kibana 可视化查询,暴露 5601 kibana: image: kibana links: - elasticsearch ports: - 5601:5601 depends_on: - "elasticsearch" #skywalking skywalking: build: context: . dockerfile: skywalking.dockerfile ports: - "10800:10800" - "11800:11800" - "12800:12800" - "8080:8080" links: - elasticsearch depends_on: - "elasticsearch" 复制代码 二:一键部署 要部署在docker中,你还得需要安装docker-ce 和 docker-compose,大家可以参照官方安装一下。 1. Docker-ce 的安装 复制代码 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce 复制代码 然后启动一下docker 服务,可以看到版本是18.06.1 复制代码 [root@localhost ~]# service docker start Redirecting to /bin/systemctl start docker.service [root@localhost ~]# docker -v Docker version 18.06.1-ce, build e68fc7a 复制代码 2. docker-compose的安装 复制代码 sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose 复制代码 3. 最后在centos上执行 docker-compopse up --build 就可以了,如果不想terminal上运行,可以加 -d 使用后台执行。 View Code 从上图中可以看到 es,kibana,skywalking都启动成功了,你也可以通过docker-compose ps 看一下是否都起来了,netstat 看一下宿主机开放了哪些端口。 复制代码 [root@localhost docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9aa90401ca16 kibana "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:5601->5601/tcp docker_kibana_1 c551248e32af docker_skywalking "/bin/sh -c /app/sky…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:10800->10800/tcp, 0.0.0.0:11800->11800/tcp, 0.0.0.0:12800->12800/tcp docker_skywalking_1 765d38469ff1 docker_elasticsearch "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 9200/tcp, 9300/tcp docker_elasticsearch_1 [root@localhost docker]# netstat -tlnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2013/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1141/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1139/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1622/master tcp6 0 0 :::8080 :::* LISTEN 38262/docker-proxy tcp6 0 0 :::10800 :::* LISTEN 38248/docker-proxy tcp6 0 0 :::22 :::* LISTEN 1141/sshd tcp6 0 0 ::1:631 :::* LISTEN 1139/cupsd tcp6 0 0 :::11800 :::* LISTEN 38234/docker-proxy tcp6 0 0 ::1:25 :::* LISTEN 1622/master tcp6 0 0 :::12800 :::* LISTEN 38222/docker-proxy tcp6 0 0 :::5601 :::* LISTEN 38274/docker-proxy [root@localhost docker]# 复制代码 然后就可以看一些8080端口的可视化UI,默认用户名密码admin,admin,一个比较耐看的UI就出来了。 三: net下的探针   从nuget上拉取一个SkyWalking.AspNetCore探针进行代码埋点,github地址:https://github.com/OpenSkywalking/skywalking-netcore 在startup类中进行注入,在页面请求中进行一次cnblogs.com的请求操作,然后仔细观察一下调用链跟踪是一个什么样子? 复制代码 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using SkyWalking.Extensions; using SkyWalking.AspNetCore; using System.Net; namespace WebApplication1 { public class Startup { // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.AddSkyWalking(option => { // Application code is showed in sky-walking-ui option.ApplicationCode = "10001 测试站点"; //Collector agent_gRPC/grpc service addresses. option.DirectServers = "192.168.23.183:11800"; }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Run(async (context) => { WebClient client = new WebClient(); var str = client.DownloadString("http://cnblogs.com"); await context.Response.WriteAsync(str); }); } } } 复制代码 可以看到这张图还是蛮漂亮的哈,也方便我们快速的跟踪代码,发现问题,找出问题, 还有更多的功能期待你的挖掘啦。 好了,本篇就说到这里,希望对你有帮助。 Demo下载 分类: docker 好文要顶 关注我 收藏该文 一线码农 关注 - 59 粉丝 - 9038 荣誉:推荐博客 +加关注 4 2 关注我 « 上一篇:netcore编程之后面对不习惯的xshell黑屏部署,是时候使用jenkins自动化发布工具了 posted @ 2018-09-18 08:18 一线码农 阅读(256) 评论(11) 编辑 收藏 评论列表 #1楼 2018-09-18 08:45 菠萝吹雪—Code 谢谢分享 支持(0)反对(0) #2楼 2018-09-18 09:02 focus-lei 博主活跃起来啦 支持(0)反对(0) #3楼 2018-09-18 09:16 Edison Chou 谢谢一线的skywalking分享! 支持(0)反对(0) #4楼 2018-09-18 09:24 快跑啊兔兔 支持支持 支持(0)反对(0) #5楼 2018-09-18 09:56 yi.shion 谢谢分享 支持(0)反对(0) #6楼[楼主] 2018-09-18 09:57 一线码农 @ 菠萝吹雪—Code 感谢支持 支持(0)反对(0) #7楼[楼主] 2018-09-18 09:57 一线码农 @ focus-lei 一直都很活跃😄 支持(0)反对(0) #8楼[楼主] 2018-09-18 09:58 一线码农 @ Edison Chou 感谢大佬支持 支持(0)反对(0) #9楼[楼主] 2018-09-18 09:58 一线码农 @ yi.shion 感谢支持 支持(0)反对(0) #10楼[楼主] 2018-09-18 10:03 一线码农 @ 快跑啊兔兔 感谢支持 支持(0)反对(0) #11楼 2018-09-18 10:07 Edison Chou @ 一线码农 你才是大佬,我是看你的文章长大哒。 支持(0)反对(0) 刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。 【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库! 【免费】要想入门学习Linux系统技术,你应该先选择一本适合自己的书籍 【前端】SpreadJS表格控件,可嵌入应用开发的在线Excel 【直播】如何快速接入微信支付功能 腾讯云 最新IT新闻: · 摩根士丹利将目标价大砍30% 京东周一收盘跌逾5% · Twitter营业费用遭分析师质疑:股价大跌4.18% · 苹果Safari浏览器出漏洞:可能导致iOS/macOS崩溃重启 · 亚马逊计划推出至少8款Alexa设备 · 特斯拉对手Lucid获沙特主权基金10亿美元投资 » 更多新闻... 华为云HC0917 最新知识库文章: · 为什么说 Java 程序员必须掌握 Spring Boot ? · 在学习中,有一个比掌握知识更重要的能力 · 如何招到一个靠谱的程序员 · 一个故事看懂“区块链” · 被踢出去的用户 » 更多知识库文章... https://www.cnblogs.com/huangxincheng/p/9666930.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信