伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 教育考试 » 文章详细 订阅RssFeed

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

来源:本站原创 浏览:90次 时间:2022-12-20

一旦你的程序docker化之后,你会遇到各种问题,比如原来采用的本地记日志的方式就不再方便了,虽然你可以挂载到宿主机,但你使用 —scale 的话,会导致记录日志异常,所以最好的方式还是要做日志中心化,另一个问题,原来一个请求在一个进程中的痉挛失败,你可以在日志中巡查出调用堆栈,但是docker化之后,原来一个进程的东西会拆成几个微服务,这时候最好就要有一个分布式的调用链跟踪,类似于wcf中的svctraceview工具。

一:搭建skywalking

github地址:

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.0transport.tcp.port: 9300network.host: 0.0.0.0
  1. elasticsearch.dockerfile

    在up的时候,将这个es文件copy到 容器的config文件夹下。

    FROM elasticsearch:5.6.4    EXPOSE 9200 9300    COPY elasticsearch.yml /usr/share/elasticsearch/config/
  1. application.yml

    skywalking的配置文件,这里也有一个坑:连接es的地址中,配置的 clustername一定要修改成和es的clustername保持一致,否则会连不上,这里容器之间用link进行互联,所以es的ip改成elasticsearch就可以了,其他的ip改成0.0.0.0 。

  2. skywalking.dockerfile

    接下来就是 skywalking的 下载安装,使用dockerfile流程化。

  1. FROM centos:7


  2. LABEL username="hxc@qq.com"


  3. WORKDIR /app


  4. RUN yum install -y wget && \

  5.    yum install -y java-1.8.0-openjdk


  6. ADD http://mirrors.hust.edu.cn/apache/incubator/skywalking/5.0.0-RC2/apache-skywalking-apm-incubating-5.0.0-RC2.tar.gz /app


  7. RUN tar -xf apache-skywalking-apm-incubating-5.0.0-RC2.tar.gz && \

  8.    mv apache-skywalking-apm-incubating skywalking


  9. RUN ls /app

  10. COPY application.yml /app/skywalking/config/application.yml


  11. WORKDIR /app/skywalking/bin


  12. USER root


  13. RUN  echo "tail -f /dev/null" >> /app/skywalking/bin/startup.sh


  14. CMD ["/bin/sh","-c","/app/skywalking/bin/startup.sh" ]

  1. docker-compose.yml

    最后就是将这三个容器进行编排,要注意的是,因为收集器会将数据放入到es中,所有一定要将es的data挂载到宿主机的大硬盘下,否则你的空间会不足的。

  1. version: '3.1'


  2. services:


  3.  #elastic 镜像

  4.  elasticsearch:

  5.    build:

  6.      context: .

  7.      dockerfile: elasticsearch.dockerfile

  8.    # ports:

  9.    #   - "9200:9200"

  10.    #   - "9300:9300"

  11.    volumes:

  12.       - "/data/es2:/usr/share/elasticsearch/data"


  13.  #kibana 可视化查询,暴露 5601

  14.  kibana:

  15.    image: kibana

  16.    links:

  17.      - elasticsearch

  18.    ports:

  19.      - 5601:5601

  20.    depends_on:

  21.      - "elasticsearch"


  22.  #skywalking

  23.  skywalking:

  24.    build:

  25.      context: .

  26.      dockerfile: skywalking.dockerfile

  27.    ports:

  28.      - "10800:10800"

  29.      - "11800:11800"

  30.      - "12800:12800"

  31.      - "8080:8080"

  32.    links:

  33.      - elasticsearch

  34.    depends_on:

  35.      - "elasticsearch"

二:一键部署
  要部署在docker中,你还得需要安装docker-ce 和 docker-compose,大家可以参照官方安装一下。
  1. Docker-ce 的安装

  1. sudo yum remove docker \

  2. docker-client \

  3. docker-client-latest \

  4. docker-common \

  5. docker-latest \

  6. docker-latest-logrotate \

  7. docker-logrotate \

  8. docker-selinux \

  9. docker-engine-selinux \

  10. docker-engine


  11. sudo yum install -y yum-utils \

  12. device-mapper-persistent-data \

  13. lvm2


  14. sudo yum-config-manager \

  15. --add-repo \

  16. https://download.docker.com/linux/centos/docker-ce.repo


  17. sudo yum install docker-ce

然后启动一下docker 服务,可以看到版本是18.06.1

[root@localhost ~]# service docker startRedirecting to /bin/systemctl start  docker.service[root@localhost ~]# docker -vDocker version 18.06.1-ce, build e68fc7a
  1. docker-compose的安装

  1. 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


  2. sudo chmod +x /usr/local/bin/docker-compose

  1. 最后在centos上执行 docker-compopse up —build 就可以了,如果不想terminal上运行,可以加 -d 使用后台执行。这样 es,kibana,skywalking都启动成功了,你也可以通过docker-compose ps 看一下是否都起来了,netstat 看一下宿主机开放了哪些端口。

[root@localhost docker]# docker psCONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                                                                                  NAMES9aa90401ca16        kibana                 "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes        0.0.0.0:5601->5601/tcp                                                                                 docker_kibana_1c551248e32af        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_1765d38469ff1        docker_elasticsearch   "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes        9200/tcp, 9300/tcp                                                                                     docker_elasticsearch_1[root@localhost docker]# netstat -tlnpActive 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的请求操作,然后仔细观察一下调用链跟踪是一个什么样子?

  1. using System;

  2. using System.Collections.Generic;

  3. using System.Linq;

  4. using System.Threading.Tasks;

  5. using Microsoft.AspNetCore.Builder;

  6. using Microsoft.AspNetCore.Hosting;

  7. using Microsoft.AspNetCore.Http;

  8. using Microsoft.Extensions.DependencyInjection;

  9. using SkyWalking.Extensions;

  10. using SkyWalking.AspNetCore;

  11. using System.Net;


  12. namespace WebApplication1

  13. {

  14.    public class Startup

  15.    {

  16.        // This method gets called by the runtime. Use this method to add services to the container.

  17.        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940

  18.        public void ConfigureServices(IServiceCollection services)

  19.        {

  20.            services.AddSkyWalking(option =>

  21.            {

  22.                // Application code is showed in sky-walking-ui

  23.                option.ApplicationCode = "10001 测试站点";


  24.                //Collector agent_gRPC/grpc service addresses.

  25.                option.DirectServers = "192.168.23.183:11800";

  26.            });

  27.        }


  28.        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

  29.        public void Configure(IApplicationBuilder app, IHostingEnvironment env)

  30.        {

  31.            if (env.IsDevelopment())

  32.            {

  33.                app.UseDeveloperExceptionPage();

  34.            }


  35.            app.Run(async (context) =>

  36.            {

  37.                WebClient client = new WebClient();


  38.                var str = client.DownloadString("http://cnblogs.com");


  39.                await context.Response.WriteAsync(str);

  40.            });

  41.        }

  42.    }

  43. }

可以看到这张图还是蛮漂亮的哈,也方便我们快速的跟踪代码,发现问题,找出问题, 还有更多的功能期待你的挖掘啦。 好了,本篇就说到这里,希望对你有帮助。


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net