系统要求:CentOS 7.2 64 位操作系统

配置 Java 环境

安装 JDK

Zipkin 使用 Java8

yum install java-1.8.-openjdk* -y

安装完成后,查看是否安装成功:

java -version

安装 Zipkin

新建目录

mkdir -p /data/release/zipkin && cd "$_"

下载 Zipkin

wget -O zipkin.jar 'https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'

启动 Zipkin

java -jar zipkin.jar

Zipkin 默认监听 9411 端口, 使用浏览器访问 http://118.89.65.22:9411 即可看到 Zipkin 自带的图形化界面(外网:请确认此CVM有外网IP且安全组已开通9411端口)。

配置 MySQL 数据持久化方案

Zipkin 支持的持久化方案很多,如: Cassandra, MySQL, Elasticsearch。本实验使用 MySQL 5.7 作为数据持久化方案。

安装 MySQL 5.7

使用 Ctrl + C 退出上个步骤的 Java 进程并下载 rmp 包

wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

安装 rpm 包

rpm -Uvh mysql57-community-release-el7-.noarch.rpm

安装 MySQL

yum install mysql-community-server -y

启动 MySQL 服务

systemctl start mysqld.service

设置 MySQL 密码

获取 root 临时密码(下面命令中的密码是教程为您自动生成的,为了方便实验的进行,不建议使用其它密码。如果设置其它密码,请把密码记住,在后续的步骤会使用到)

grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}'

使用上一步的获得的临时密码登入 MySQL

mysql -uroot -p

设置 MySQL 账户 root 密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Xx$Zipkin2017';

退出 MySQL, 回到 Bash shell

exit;

初始化 Zipkin 数据库

编写初始化脚本

请在 /data/release/zipkin 目录下创建 zipkin_init.sql,参考下面的内容。

 CREATE TABLE IF NOT EXISTS zipkin_spans (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL,
`id` BIGINT NOT NULL,
`name` VARCHAR(255) NOT NULL,
`parent_id` BIGINT,
`debug` BIT(1),
`start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT 'ignore insert on duplicate';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';
ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range'; CREATE TABLE IF NOT EXISTS zipkin_annotations (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
`span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
`a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
`a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
`a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
`a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
`endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
`endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
`endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
`endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job'; CREATE TABLE IF NOT EXISTS zipkin_dependencies (
`day` DATE NOT NULL,
`parent` VARCHAR(255) NOT NULL,
`child` VARCHAR(255) NOT NULL,
`call_count` BIGINT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);

登录 Mysql

mysql -u root --password='Xx$Zipkin2017'

创建 Zipkin 数据库

create database zipkin;

切换数据库

use zipkin;

初始化表及索引

source /data/release/zipkin/zipkin_init.sql

执行以下命令会看到zipkin_annotationszipkin_dependencieszipkin_spans 三张数据表,说明初始化成功了

show tables;

退出 MySQL, 回到 Bash shell

exit

启动 Zipkin

注: 此处默认使用实验生成的密码

cd /data/release/zipkin
STORAGE_TYPE=mysql MYSQL_HOST=localhost MYSQL_TCP_PORT=3306 MYSQL_DB=zipkin MYSQL_USER=root MYSQL_PASS='Xx$Zipkin2017' \
nohup java -jar zipkin.jar &

创建具有数据上报能力的Demo

搭建 NodeJS 环境

curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
yum install nodejs -y

创建Demo目录

创建/data/release/service_a目录

mkdir -p /data/release/service_a && cd "$_"

使用 NPM 安装相关依赖

请在 /data/release/service_a 目录下创建并编辑 package.json,参考下面的内容。

 {
"name": "service_a",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.15.3",
"zipkin": "^0.7.2",
"zipkin-instrumentation-express": "^0.7.2",
"zipkin-transport-http": "^0.7.2"
}
}

安装相关依赖

npm install

创建并编辑 app.js

请在 /data/release/service_a 目录下创建 app.js,参考下面的内容。

示例代码:/data/release/service_a/app.js

 const express = require('express');
const {Tracer, ExplicitContext, BatchRecorder} = require('zipkin');
const {HttpLogger} = require('zipkin-transport-http');
const zipkinMiddleware = require('zipkin-instrumentation-express').expressMiddleware; const ctxImpl = new ExplicitContext();
const recorder = new BatchRecorder({
logger: new HttpLogger( {
endpoint: 'http://127.0.0.1:9411/api/v1/spans'
})
}); const tracer = new Tracer({ctxImpl, recorder}); const app = express(); app.use(zipkinMiddleware({
tracer,
serviceName: 'service-a'
})); app.use('/', (req, res, next) => {
res.send('hello world');
}); app.listen(3000, () => {
console.log('service-a listening on port 3000!')
});

启动服务

node app.js

该服务监听 3000 端口, 使用浏览器访问 http://118.89.65.22:3000 后,看到“hello world” 的文本字样说明服务已经正常工作。

部署完成

查看采集到的追踪数据

使用浏览器访问 http://118.89.65.22:9411 即可看到刚才访问产生的追踪数据。
至此,本入门教程已结束,而 Zipkin 的学习只是一个开始,如有兴趣,可尝试搭建一个基于 Kafka + Zookeeper + Elasticsearch 的分布式服务。

大功告成

恭喜您已经完成了搭建基于 ZIPKIN 的数据追踪系统的学习。

基于CentOS搭建基于 ZIPKIN 的数据追踪系统的更多相关文章

  1. 基于centos搭建微信小程序服务,配置及数据库等

    基于centos搭建小程序, ps:请提前20天准备将域名备案,申请ssl证书 实验上机地址:https://cloud.tencent.com/developer/labs/lab/10004 准备 ...

  2. 基于 CentOS 搭建 WordPress 个人博客

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 腾讯云提供了开发者实验室帮助用户搭建 WordPress 个人博客,教程内容如下,用户可以点击开发者实验室快速上机完成实验. 准备 LNMP ...

  3. 数据追踪系统Zipkin 及其 Zipkin的php客户端驱动hoopak

    Zipkin是Twitter的一个开源项目,是一个致力于收集Twitter所有服务的监控数据的分布式跟踪系统,它提供了收集数据,和查询数据两大接口服务.Zipkin 是一款开源的分布式实时数据追踪系统 ...

  4. zipkin分布式链路追踪系统

    基于zipkin分布式链路追踪系统预研第一篇   分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Inf ...

  5. 基于zipkin分布式链路追踪系统预研第一篇

    本文为博主原创文章,未经博主允许不得转载. 分布式服务追踪系统起源于Google的论文“Dapper, a Large-Scale Distributed Systems Tracing Infras ...

  6. 基于ambari搭建hadoop生态圈大数据组件

    Ambari介绍1Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的供应.管理和监控.Ambari已支持大多数Hadoop组件,包括HDFS.MapReduce.H ...

  7. 基于CentOS搭建Nginx 静态网站

    系统要求: CentOS 7.2 64 位操作系统 一. 安装 Nginx(在 CentOS 上,可直接使用 yum 来安装 Nginx) yum install nginx -y 安装完成后,使用 ...

  8. 基于Centos搭建Jenkins 环境搭建

    系统要求: CentOS 7.2 64 位操作系统 安装 Jenkins Jenkins 简介 Jenkins 是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提 ...

  9. 基于Centos搭建Maven 安装与使用

    CentOS 7.2 64 位操作系统 安装 Maven Maven 简介 Apache Maven 是一个软件项目管理及自动构建工具,由 Apache 软件基金会所提供.基于项目对象模型(缩写:PO ...

随机推荐

  1. Xshell不能使用退格、删除键进行删除的解决方法

    xshell在输入命令时,如果敲错字母了的时候,想通过按退格键删除敲错的字母,却在屏幕显示出了“^H”,退格不行,再按删除键,却显示出“^[[3~”,怎么着就是删除不了输错的字母. 修改办法:文件-- ...

  2. ubuntu ufw防火墙软件的配置入门

    顺便,一条龙作完安全吧. ufw的使用,是比iptables简单.但只能作简单的事儿,更改简单的netfilter里的iptable里的记录.难点的,可能还是得iptables原生命令. 自打2.4版 ...

  3. 详解webpack中的hash、chunkhash、contenthash区别

    hash.chunkhash.contenthash hash一般是结合CDN缓存来使用,通过webpack构建之后,生成对应文件名自动带上对应的MD5值.如果文件内容改变的话,那么对应文件哈希值也会 ...

  4. POJ 1017 Packets【贪心】

    POJ 1017 题意: 一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为 1*1, 2*2, 3*3, 4*4, 5*5, 6*6.  这些产品通常 ...

  5. python全栈开发day36-IO多路复用

    一.复习 1.进程.线程.协程 进程:是计算机中最小的资源分配单位,数据隔离,可以利用多核,数据不安全 线程:是计算机中最小的CPU调度单位,数据共享,GIL,数据不安全 协程:是线程的一部分,是由用 ...

  6. python全栈开发知识点补充for else和while else如果不是除正常以外的其他方式退出循环,那么else语句就会被执行。

    如果不是除正常以外的其他方式退出循环,那么else语句就会被执行. 也就是循环体内没有break语句.return语句.和其他异常语句的执行. for   else >>> for ...

  7. Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法

    1.获取客户端IP地址实现方法(扩展类) using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.ModelBinding; u ...

  8. python tkinter-单选、多选

      单选按钮 tkinter.Radiobutton(root,text='a').pack() tkinter.Radiobutton(root,text='b').pack() tkinter.R ...

  9. python爬虫积累(一)--------selenium+python+PhantomJS的使用

    最近按公司要求,爬取相关网站时,发现没有找到js包的地址,我就采用selenium来爬取信息,相关实战链接:python爬虫实战(一)--------中国作物种质信息网 一.Selenium介绍 Se ...

  10. 中间人攻击工具ettercap

    中间人攻击工具ettercap (一).简介 (二).模块划分 1.Snifer 2.MITM 3.Filter 4.Log 5.Plugin (三).特性 (四).用户操作界面 (五).指定目标 ( ...