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

https://www.cnblogs.com/huangxincheng/p/9666930.html

  一旦你的程序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

  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 。

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

复制代码

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

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

  1. 最后在centos上执行 docker-compopse up --build 就可以了,如果不想terminal上运行,可以加 -d 使用后台执行。

从上图中可以看到 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 ::

部署你的分布式调用链跟踪框架skywalking的更多相关文章

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

    一旦你的程序docker化之后,你会遇到各种问题,比如原来采用的本地记日志的方式就不再方便了,虽然你可以挂载到宿主机,但你使用 --scale 的话,会导致 记录日志异常,所以最好的方式还是要做日志中 ...

  2. 分布式调用链跟踪工具Jaeger?两分钟极速体验

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. istio分布式调用链Jaeger

    1.安装 kubectl apply -n istio-system -f https://raw.githubusercontent.com/jaegertracing/jaeger-kuberne ...

  4. idou老师教你学Istio 22 : 如何用istio实现调用链跟踪

    大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等一些功能. 每一个功能都帮助我们在不同场景中实现不同的业务.那么其中比如流量监控这种复杂的功能Istio是如何让我们在不同的应用中实现 ...

  5. 调用链系列一、Zipkin架构介绍、Springboot集承(springmvc,HttpClient)调用链跟踪、Zipkin UI详解

    1.Zipkin是什么 Zipkin分布式跟踪系统:它可以帮助收集时间数据,解决在microservice架构下的延迟问题:它管理这些数据的收集和查找:Zipkin的设计是基于谷歌的Google Da ...

  6. Spring Cloud 微服务六:调用链跟踪Spring cloud sleuth +zipkin

    前言:随着微服务系统的增加,服务之间的调用关系变得会非常复杂,这给运维以及排查问题带来了很大的麻烦,这时服务调用监控就显得非常重要了.spring cloud sleuth实现了对分布式服务的监控解决 ...

  7. spring cloud 学习(8) - sleuth & zipkin 调用链跟踪

    业务复杂的微服务架构中,往往服务之间的调用关系比较难梳理,一次http请求中,可能涉及到多个服务的调用(eg: service A -> service B -> service C... ...

  8. APM调用链产品对比

    APM调用链产品对比 随着企业经营规模的扩大,以及对内快速诊断效率和对外SLA(服务品质协议,service-level agreement)的追求,对于业务系统的掌控度的要求越来越高,主要体现在: ...

  9. 基于Cat的分布式调用追踪

    Cat是美团点评出的一款APM工具,同类的产品也有不少,知名的开源产品如zipkin和pinpoint:国内收费的产品如oneapm.考虑到Cat在互联网公司的应用比较广,因此被纳入选型队列,我也有幸 ...

随机推荐

  1. list列表、tuple元组、range常用方法总结

    list 列表(数组),是可迭代对象,列表是可变的所以列表的方法都是在列表本身更改的.里面看可以放各种数据类型的数据,可存储大量数据 连接列表可以使用 + 或 extend() a = [1, 3, ...

  2. google黑客语法总结

    搜索也是一门艺术 说起Google,可谓无人不知无人不晓,其强大的搜索功能,可以让你在瞬间找到你想要的一切.不过对于普通的用户而言,Google是一个强大的搜索引擎:而对于黑客而言,则可能是一款绝佳的 ...

  3. Kattis - convexpolygonarea 【数学】

    题意 给出一系列点,求这个多边形面积 思路 向量叉积 AC代码 #include <cstdio> #include <cstring> #include <ctype. ...

  4. UIPageControl修改圆点大小,根据View大小自适应

    遇到了个基本的控件问题,当设置UIPageControl的frame很小时,上面的小圆点会忽视view的frame而将圆点显示到控件外面. 但是如果想要设置小一点的圆点,或改变圆点间的间距,从而实现自 ...

  5. 每天一个Linux命令(57)rpm命令

        rpm是一个功能十分强大的软件包管理系统.     (1)用法:     用法:  rpm  [参数]  [包名]     (2)功能:     功能:  使得在Linux下安装.升级和删除软 ...

  6. yii异常处理架构

    使用方法: use \yii\base\ErrorException; try { exec("curl http://xxx",$out,$retno); if(0 !== $r ...

  7. python中的值传递和引用传递

    Python中的变量是没有类型的,我们可以把它看做一个(*void)类型的指针,变量是可以指向任何对象的,而对象才是有类型的. Python中的对象有可变对象(number,string,tuple等 ...

  8. 三 ip dns等配置

    一IP.端口.协议基本概念 ip的简单概念 互联网上的计算机,都会有一个唯一的32位的地址,ip地址 我们访问服务器,就必须通过ip地址 局域网里也有预留的ip地址  192/10/172.居于王的i ...

  9. 容器rootfs

    挂载在容器根目录上.用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”: 它还有一个更为专业的名称:rootfs (根文件系统). 所以,一个最常见的rootfs,或者说容器镜像,会包 ...

  10. flume 使用遇到问题及解决

    1. ../flume/fchannel/spool/data/ 目录下发生缓存文件积压 可能原因:同一时间同一客户端下向两个监控目录mv文件:或同一时间多个客户端向服务端上传文件 2.清空../fl ...