Zipkin Server Configuration Using Docker and MySQL[转]
Zipkin is a used for capturing timing data, it also has a centralized repository, and a microweb server that allows you to display, and search through spans and traces of your distributed programs or websites.
We can configure Zipkin by deploying it in a Docker container. Using this approach, we can match the latest version of Zipkin by just pulling down the latest images. You can Isolate the Docker service and dependencies to just the container(s), and chose where you want your data to persist. Most importantly, by using Docker, you can spend more time focused on data analysis, instead of spending time on configuring a Zipkin as a service.
The Target Scenario
Our main task is setting up a Zipkin server with MySQL, so that the spans/traces persist on the host file.
Zipkin Server Configuration
Install Package Dependencies
Log into your Zipkin host machine and make sure your system is up to date:
sudo dnf update && sudo dnf upgrade
Add the Docker repository:
sudo dnf install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
Install Docker CE:
sudo dnf install docker-ce
Enable Docker as a service:
sudo systemctl enable docker.service
sudo systemctl start docker.service
(Optional) Add your limited user account to the
dockergroup, so that you can run Docker commands without usingsudo:sudo usermod -aG docker username
You can test your Docker installation by running
docker run hello-world.Install Docker Compose:
curl -LO https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m`
sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
You can test the installation with
docker-compose --version.Note
The current stable version of Docker Compose is 1.16.1. Check for the latest version at the releases pageand update the version in thecurlcommand accordingly.Install git:
sudo dnf install git
Use git to retrieve the Zipkin Docker-compose YAML files at openzipkin/docker-zipkin. This is one of the powerful features of Docker, these files hold all of the system level configurations we need, to run several different Zipkin configurations. Like, Zipkin with MySQL, Zipkin with elasticsearch, and Zipkin with Kakfa.
cd ~
git clone https://github.com/openzipkin/docker-zipkin.git
Install MySQL:
sudo dnf install mysql
Configure Docker
The Docker service will manage your containers, the container’s host, Zipkin services, and your MYSQL server.

Docker is in charge of starting and stopping these services automatically when the host system is rebooted. it’ll help us to map the ports from the container to the host’s ports and it’ll manage exporting the MySQL database files onto the host system. Docker can check to see if the container has failed, and restart it for us too. The host is in charge of running the actual Docker service and setting the firewall correctly.
Notice that the Zipkin container will expose port 9411 for its service, and the MySQL container will expose port 3306. We’ll use the Docker-compose YAML files to forward port 9411 to the host’s port 9411, so that the container will be accessible on the internet.
Zipkin Server Firewall Concepts
To avoid the server being compromised, limit the exposure of our Zipkin server to just our analyst and client machines.
The default Fedora 26 firewall rules block all ports as a safety precaution. Create a new firewall zone to handle the Zipkin services without exposing too much of the system:
Our goal is to set up the Zipkin Server for:
- Thrift service: receiving data from clients
- Web service: showing searches of time data
- lock down access to only our web and analyst machines.
Zipkin Server Firewall
Create a new zone in our firewall called zipkin
sudo firewall-cmd --new-zone=zipkin --permanent
Reload the firewall and refresh your zone list.
sudo firewall-cmd --reload
Add an analyst machine IP (If you forget to define any source IPs, you will have no filtering on your IPs. You need at least 1 source IP to start filtering on IPs. If there are no source IPs defined, any machine can connect to your server.)
sudo firewall-cmd --zone=zipkin --add-source=203.0.113.0/32 --permanent
Open a port through your firewall.
sudo firewall-cmd --zone=zipkin --add-port=9411/tcp --permanent
(Optional) Since we may want to access our machine from the analyst machine, it may be a good idea to add an ssh port.
sudo firewall-cmd --zone=zipkin --add-service=ssh --permanent
Reload your firewall rules to activate them in your new zone.
sudo firewall-cmd --reload
View your new zone:
sudo firewall-cmd --zone=zipkin --list-all
Docker-Compose Configuration
The docker-compose yml files will control which system configuration we can use. We’re going to select a MySQL configuration for storage.
Copy the MySQL docker-compose YAML file to your home directory and rename it docker-init.yml as we’re going to need to make a few changes:
cd ~
cp docker-zipkin/docker-compose.yml docker-init.yml
Open
docker-init.ymlin a text editor and edit the content as follows:- ~/docker-init.yml
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
version: '2' services:
storage:
image: openzipkin/zipkin-mysql
container_name: mysql
# Uncomment to expose the storage port for testing
ports:
- 3306:3306
volumes:
- dbfiles:/mysql/data
restart: unless-stopped zipkin:
image: openzipkin/zipkin
container_name: zipkin
# Environment settings are defined here https://github.com/openzipkin/zipkin/tree/1.19.0/zipkin-server#environment-variables
environment:
- STORAGE_TYPE=mysql
# Point the zipkin at the storage backend
- MYSQL_HOST=mysql
# Uncomment to enable scribe
# - SCRIBE_ENABLED=true
# Uncomment to enable self-tracing
# - SELF_TRACING_ENABLED=true
# Uncomment to enable debug logging
# - JAVA_OPTS=-Dlogging.level.zipkin=DEBUG
ports:
# Port used for the Zipkin UI and HTTP Api
- 9411:9411
depends_on:
- storage
restart: unless-stopped dependencies:
image: openzipkin/zipkin-dependencies
container_name: dependencies
entrypoint: crond -f
environment:
- STORAGE_TYPE=mysql
- MYSQL_HOST=mysql
# Add the baked-in username and password for the zipkin-mysql image
- MYSQL_USER=zipkin
- MYSQL_PASS=zipkin
# Uncomment to adjust memory used by the dependencies job
- JAVA_OPTS=-verbose:gc -Xms512m -Xmx512m
depends_on:
- storage
restart: unless-stopped volumes:
dbfiles:
In the MySQL container section in the docker-init.yml, export the MySQL data directory, forward the MySQL port to the host, and add the restart command so that this service is automatically restarted if it goes down.
In the Zipkin container section in the docker-init.yml, make sure the port 9411 is forwarded to the host machine and add the restart command so that this service is automatically restarted if it goes down.
In the dependencies container, we uncomment the JAVA_OPTS and set it to at least 512M. This setting is optimized for a 1G Linode. However, if in the future this container needs more memory, you can increase this value. Add a restart command to the end of this section.
You can now update your Zipkin Docker images by performing a
docker pullcommand. This will check the web for the images we need (the first time), and all other times it’ll update the images to the latest version if need be.docker-compose -f docker-init.yml pull
Run your Docker services by using the
docker-compose upcommand. Conversely there is also adocker-compose downcommand that can be used to shutdown your Zipkin services.docker-compose -f docker-init.yml up -d
Notice the -d flag at the end of the command, this detaches the container. Now it’s running as its own process. If we just left the machine, it would continue to run, even if we rebooted the machine, it would run when the Docker service started it, because we didn’t explicitly issue a
docker-compose downcommand. Just for reference, to shutdown the Zipkin services:docker-compose -f docker-init.yml down
Backup Span/Trace Data
There are 2 different backup methods: using MySQL , and using sysadmin.
MySQL Backup
Ensure that the MySQL service is running on a container. You can check this with a
docker pscommand. Thedocker pscommand displays the active containers:- docker -ps
-
1
2
3
4
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
023d14e6193d openzipkin/zipkin-dependencies "crond -f" 3 days ago Up 3 days dependencies
ee0c255b7765 openzipkin/zipkin "/bin/sh -c 'test ..." 3 days ago Up 3 days 9410/tcp, 0.0.0.0:9411->9411/tcp zipkin
43f659b36f17 openzipkin/zipkin-mysql "/bin/sh -c /mysql..." 3 days ago Up 3 days 0.0.0.0:3306->3306/tcp mysql
If isn’t running, make sure you start the Zipkin services with the
docker-compose upcommand first. Then issue the MySQLdump with the following parameters from your Zipkin host machine.mysqldump --protocol=tcp -A -pzipkin -uzipkin > ~/database.bak
This command will dump the entire MySQL database from your MySQL container into the file called database.bak in your home directory. Alternatively, you can just dump your Zipkin span/trace data with:
mysqldump --protocol=tcp -pzipkin -uzipkin zipkin > ~/db_zipkin.bak
Database Backups
We can just zip or tar the exported database files on the host system. Since we don’t know if the container is writing information to these files at any given time, we need to make sure that the container is stopped.
We can check the status with a
docker pscommand or just perform adocker downcommand.docker-compose -f docker-init.yml down
After the
docker downcommand, we can perform adocker pscommand and see that there are no containers running. That should look like this:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
At this point, we can create a zip backup of your files. The db files will be prepended with the name of your user. If you are running as root it would be root_dbfiles, but running as root isn’t recommended.
sudo zip -r ~/db_files.zip /var/lib/docker/volumes/_dbfiles/
Remember to start your Zipkin services if they’re still needed. They will not restart even on a reboot because we have explicitly shut them down.
Testing the Zipkin Service
Easiest way to do this is by using your web browser on your analyst machine. Log into your analyst machine, bring up your browser, and type in the following URL:
http://192.0.2.0:9411/zipkin/
If you see the Zipkin web page, you’re done.
If you don’t see a web page, log into the Zipkin host machine, and make sure your containers are up by running either
docker pscommand ordocker-compose upcommand. If the containers are not all running, it’s possible that your Linode has run out of memory.Make sure your firewall port is open by typing:
sudo firewall-cmd --add-port 9411/tcp --permanent
At this point, what might have happened is that we added the wrong IP address of our analyst machine. We can check this by logging into our analyst machine. If our analyst machine is a Fedora workstation, we can install nmap and perform a network port status check to our Zipkin host machine like so:
sudo dnf install -y nmap
nmap 192.0.2.0 -p 9411 -Pn
A good return has an open for the STATE of the port, anything else and we probably don’t have the right analyst machine IP address in our firewall rules:
Starting Nmap 7.40 (https://nmap.org) at 2017-09-24 18:34 MDT
Nmap scan report for zipkin (192.0.2.0)
Host is up (0.10s latency).
PORT STATE SERVICE
9411/tcp open unknown
Review your firewall rules and try again.
More Information
You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.
Zipkin Server Configuration Using Docker and MySQL[转]的更多相关文章
- docker nginx mysql
docker run -p 9000:9000 --name myphp -v /docker/www/:/var/www/html/ -v /docker/php/php.ini:/usr/loca ...
- docker安装MySQL 8.0及初始化错误处理
Preface Several days ago,I've implement a docker environmnet,I'm gonna Install a MySQL 8. ...
- linux记录-docker配置mysql
docker部署mysql 1.拉取镜像 docker pull mysql 2.docker rm containerID 删除镜像iD 3.创建镜像 docker run --name=m ...
- 阿里云服务器centos7,docker部署mysql+Redis+vue+springboot+Nginx+fastdfs,亲测可用
一.购买云服务器 我是今年双十一期间在阿里云购买的服务器, 简单配置2核_4G_40G_3M,三年用了不到800块,不过当时我记得腾讯云更便宜,个人感觉,阿里的云服务器更加的稳定, 毕竟身经百战, 经 ...
- docker 部署mysql连接问题
发现windows上有一个docker descktop(虽然不怎么好用), 安装之后准备直接用docker搭本地测试环境的基础设施(比如MySQL,Redis,MongoDB,ES啥的), 虽然比去 ...
- springboot多数据源配合docker部署mysql主从实现读写分离
本篇主要有两部分: 1.使用docker部署mysql主从 实现主从复制 2.springboot项目多数据源配置,实现读写分离 一.使用docker部署mysql主从 实现主从复制 此次使用的是wi ...
- Docker 安装 MySQL、Redis
1 Docker 中安装 Redis 1.1 创建目录 在硬盘上创建 redis 的数据目录: mkdir -p /Users/yygnb/dockerMe/redis/data 为该目录添加权限: ...
- Docker搭建MySQL服务
Docker开源镜像 前面我们已经安装好了Docker,也简单了解了Docker.那么我们可以尝试搭建一个MySQL服务. 要搭建服务就要启动服务容器,要创建容易就要有镜像,Docker提供了一个类似 ...
- 使用Docker安装Mysql
最近使用阿里云服务器,学习一下Docker,今天学着使用Docker安装MySQL. 首先,从阿里云的Docker Hub 上pull一个MySQL的image. [centos@loovelj~]$ ...
随机推荐
- python学习第42、43天 HTML\CSS
前端是什么? 帮助不了解后端程序的客户轻松使用程序的工具,可以提升工作效率,提供各种各样的体验. 通用的前端大致会使用三种语言,用在三个不同的方面对前端进行架构和优化,这里也只介绍这三种 web前端常 ...
- 【原创】运维基础之OpenResty
openresty 1.15.8.1 官方:https://openresty.org/en/ 一 简介 OpenResty® is a dynamic web platform based on N ...
- 协程,twisted
最原始的请求url_list=[ 'https://www.cnblogs.com/yunxintryyoubest/category/1338759.html', 'https://www.cnbl ...
- 谷歌被爆秘密研发新系统 欲5年内取代Android
谷歌2年多来有一群工程师秘密研发新系统,希望最终能取代手机操作系统安卓.安卓日前遭欧盟以反垄断为由重罚. 谷歌的新研发计划Fuchsia是从零开始,希望在更多个人装置和各式小巧装置联机上网的情况下,能 ...
- 在启用属性的情况下启动 Confluence 6
在一些情况下,你可以希望 Confluence 在系统启动的时候就对属性文件进行打印.如果你的 Confluence 经常进行重启,并且你可能忘记来启动针对系统诊断的属性文件日志开关. 编辑 CONF ...
- RefineDet算法笔记
---恢复内容开始--- 一.创新点 针对two-stage的速度慢以及one-stage精度不足提出的方法,refinedet 包括三个核心部分:使用TCB来转换ARM的特征,送入ODM中进行检测: ...
- ionic3 git 提交报错
npm ERR! cordova-plugin-camera@ gen-docs: `jsdoc2md --template "jsdoc2md/TEMPLATE.md" &quo ...
- 用来表达更复杂的sql语句!!!!!extra 原声sql
extra 用来表达更复杂的sql语句!!!!! extra可以指定一个或多个 参数,例如 select, where or tables. 这些参数都不是必须的,但是你至少要使用一个!要注意这些额外 ...
- 一道面试题 vuex缺点?
最近去面试的时候,面试官有一道题是让我阐述用vuex的优缺点,优点倒还好说,这个缺点还真没有认识到,有道友可以帮忙解惑嘛? 2 回答 慕标5265247 这种问题一般都有通用回答套路.一件挺好的东西, ...
- 论文阅读笔记三:R2CNN:Rotational Region CNN for Orientation Robust Scene Text Detection(CVPR2017)
进行文本的检测的学习,开始使用的是ctpn网络,由于ctpn只能检测水平的文字,而对场景图片中倾斜的文本无法进行很好的检测,故将网络换为RRCNN(全称如题).小白一枚,这里就将RRCNN的论文拿来拜 ...