zipkin存储在elasticsearch sql中,怎么引入zipkin-dependencies

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
要做微服务首先得把全链路监控搭起来,参考过一些方案,拿其中唯品会的方案来举例:
调用链信息分别存储于 HBase 和 ElasticSearch中,ElasticSearch 单纯承担起类似于 Solr 的角色,查询的时候只需要通过 ElasticSearch 的倒排索引查到相关的 Rowkey 再去 HBase 里通过 Rowkey 查得完整调用链信息,并将起展现出来。
我知道 ElasticSearch 本身其实可以做可靠性存储的,为什么不直接将 Trace 调用链信息全量存入 ElasticSearch 中,这里借用 HBase 意义何在?
如果是为了后续的批处理计算,也感觉不妥,ES 也有 hadoop插件,可以做集成。如果说 HBase 能够承受更大的吞吐,感觉也不对,ES 能承受的吞吐也不小。
关于这个问题我依旧思考不出个所以然来,忘各位给出见解,谢谢了!
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
唯品会是如何设计的不是太清楚。
我知道 twitter 开源的zipkin分布式追踪系统是直接将trace信息直接存储在 elasticsearch 中的。当然zipkin还支持很多其它的存储方式如mysql/nosql。
条条大路通罗马。我认为不需要太纠结于别人为什么要这样选择,更多应该关注别人做成了什么。这当中有很多原因外人是无法知道的,也许就是个人便好,也许跟公司内部技术有关,也许有其它考量。但是至少有一点是可以确定的要实现相同的功能,并不一定要选择hbase + elasticsearch才能完成。
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:& & &微服务之分布式跟踪系统(springboot+zipkin+mysql)
& & & & & &通过上一节《》我们简单熟悉了zipkin的使用,但是收集的数据都保存在内存中重启后数据丢失,不过zipkin的Storage除了内存,还有Cassandra、MYSQL、ElasticSearch。
二、zipkin的各种Storage配置简介
& & & & & zipkin存在一些公用的配置,同时存在一些私有的配置(详细信息地址为:/openzipkin/zipkin/tree/master/zipkin-server#configuration-for-the-ui),此处不做配置说明的翻译(因为都比较简单易懂),其公用的配置如下所示:
*`QUERY_PORT`: Listen port for the Defaults to 9411
*`QUERY_LOG_LEVEL`: Log level wr Defaults to INFO
*`QUERY_LOOKBACK`: How many milliseconds queries can look back from endTs;Defaults to 7 days
*`STORAGE_TYPE`: SpanStore implementation: one of `mem`, `mysql`, `cassandra`,`elasticsearch`
*`COLLECTOR_PORT`: Listen port for t Defaults to 9410
*`COLLECTOR_SAMPLE_RATE`: Percentage of traces to retain, defaults to alwayssample (1.0).
(1)Cassandra Storage配置
* `CASSANDRA_KEYSPACE`: The keyspace to use. Defaults to &zipkin&.
* `CASSANDRA_CONTACT_POINTS`: Comma separated list of hosts / ip addresses part of Cassandra cluster. Defaults to localhost
* `CASSANDRA_LOCAL_DC`: Name of the datacenter that will be considered &local& for latency load balancing. When unset, load-balancing is round-robin.
* `CASSANDRA_ENSURE_SCHEMA`: Ensuring cassandra has the latest schema. If enabled tries to execute scripts in the classpath prefixed with `cassandra-schema-cql3`. Defaults to true
* `CASSANDRA_USERNAME` and `CASSANDRA_PASSWORD`: Cassandra authentication. Will throw an exception on startup if authentication fails. No default
* `CASSANDRA_USE_SSL`: Requires `javax.net.ssl.trustStore` and `javax.net.ssl.trustStorePassword`, defaults to false.
(2)MySQL Storage配置
* `MYSQL_DB`: The database to use. Defaults to &zipkin&.
* `MYSQL_USER` and `MYSQL_PASS`: MySQL authentication, which defaults to empty string.
* `MYSQL_HOST`: Defaults to localhost
* `MYSQL_TCP_PORT`: Defaults to 3306
* `MYSQL_MAX_CONNECTIONS`: Maximum concurrent connections, defaults to 10
* `MYSQL_USE_SSL`: Requires `javax.net.ssl.trustStore` and `javax.net.ssl.trustStorePassword`, defaults to false.
(3)Elasticsearch Storage配置
* `ES_CLUSTER`: The name of the elasticsearch cluster to connect to. Defaults to &elasticsearch&.
* `ES_HOSTS`: A comma separated list of elasticsearch hostnodes to connect to. When in host:port
format, they should use the transport port, not the http port. To use http, specify
base urls, ex. http://host:9200. Defaults to &localhost:9300&. When not using http,
Only one of the hosts needs to be available to fetch the remaining nodes in the
cluster. It is recommended to set this to all the master nodes of the cluster.
If the http URL is an AWS-hosted elasticsearch installation (e.g.
https://search-domain-xyzzy.us-west-2.) then Zipkin will attempt to
use the default AWS credential provider (env variables, system properties, config
files, or ec2 profiles) to sign outbound requests to the cluster.
* `ES_PIPELINE`: Only valid when the destination is Elasticsearch 5.x. Indicates the ingest
pipeline used before spans are indexed. No default.
* `ES_MAX_REQUESTS`: Only valid when the transport is http. Sets maximum in-flight requests from
this process to any Elasticsearch host. Defaults to 64.
* `ES_AWS_DOMAIN`: The name of the AWS-hosted elasticsearch domain to use. Supercedes any set
`ES_HOSTS`. Triggers the same request signing behavior as with `ES_HOSTS`, but
requires the additional IAM permission to describe the given domain.
* `ES_AWS_REGION`: An optional override to the default region lookup to search for the domain
given in `ES_AWS_DOMAIN`. Ignored if only `ES_HOSTS` is present.
* `ES_INDEX`: The index prefix to use when generating daily index names. Defaults to zipkin.
* `ES_DATE_SEPARATOR`: The date separator to use when generating daily index names. Defaults to '-'.
* `ES_INDEX_SHARDS`: The number of shards to split the index into. Each shard and its replicas
are assigned to a machine in the cluster. Increasing the number of shards
and machines in the cluster will improve read and write performance. Number
of shards cannot be changed for existing indices, but new daily indices
will pick up changes to the setting. Defaults to 5.
三、zipkin环境准备与启动
& & & &在本节中,以MySQL为例进行说明,由于目前只是Mysql5.6和5.7进行测试过,所以本次我选择Mysql5.7版本。
(1)&&& 初始化数据库
& & & &安装好Mysql5.7后新建zipkin的数据库,然后执行下面的SQL语句新建表:
CREATETABLE IF NOT EXISTS zipkin_spans (
`trace_id_high` BIGINT NOT NULL DEFAULT 0COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64bit',
`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_
ALTERTABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT'ignore insert on duplicate';
ALTERTABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'forjoining with zipkin_annotations';
ALTERTABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'forgetTracesByIds';
ALTERTABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
ALTERTABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering andrange';
CREATETABLE IF NOT EXISTS zipkin_annotations (
`trace_id_high` BIGINT NOT NULL DEFAULT 0COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64bit',
`trace_id` BIGINT NOT NULL COMMENT 'coincideswith zipkin_spans.trace_id',
`span_id` BIGINT NOT NULL COMMENT 'coincideswith 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 toimplement TTL; Annotation.timestamp or zipkin_spans.timestamp',
`endpoint_ipv4` INT COMMENT 'Null whenBinary/Annotation.endpoint is null',
`endpoint_ipv6` BINARY(16) COMMENT 'Null whenBinary/Annotation.endpoint is null, or no IPv6 address',
`endpoint_port` SMALLINT COMMENT 'Null whenBinary/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_
ALTERTABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`,`a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
ALTERTABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`)COMMENT 'for joining with zipkin_spans';
ALTERTABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'forgetTraces/ByIds';
ALTERTABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'forgetTraces and getServiceNames';
ALTERTABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces';
ALTERTABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces';
ALTERTABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'fordependencies job';
CREATETABLE 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_
ALTERTABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);
(2)&&& 启动实例
& & & &执行命令:java -jar zipkin-server-1.17.1-exec.jar --STORAGE_TYPE=mysql--MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=root --MYSQL_HOST=localhost--MYSQL_TCP_PORT=3306,启动成功如下图所示:
(3)&&& 查看运行效果
& & & &通过上图,我们发现zipkin使用springboot,并且启动的端口为9411,然后我们通过浏览器访问,效果如下:
四、分布式跟踪系统实践(springboot+zipkin+mysql)
&4.1场景设置与分析
& & & 现在有一个服务A调用服务B,服务B又分别调用服务C和D,整个链路过程的关系图如下所示:
4.2 代码编写
& & & 具体代码和上一节代码相同,源代码下载地址:文件夹springboot+zipkin下面。
4.3运行效果
&(1)分别启动每个服务,然后访问服务1,浏览器访问()
(2)输入zipkin地址,每次trace的列表
点击其中的trace,可以看trace的树形结构,包括每个服务所消耗的时间:
点击每个span可以获取延迟信息:
同时可以查看服务之间的依赖关系:
同时查看zipkin数据库表已经存在数据:
本文已收录于以下专栏:
相关文章推荐
Zipkin 为一个分布式的调用链跟踪系统( distributed tracing system ) ,设计来源于 google dapper paper
官方网站 http://zipkin...
zipkinzipkin为分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪。architecture
如图,在复杂的调用链路中假设存在一条调用链路响应缓慢,如何定位其中延迟高...
Zipkin is a distributed tracing system that helps us gather timing data for all the disparate servic...
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[-]
architectureinstallterminologybrave
Zipkin分布式任务追踪zipkin简介Zipkin 是一款开源的分布式实时数据追踪系统,由基于 Google Dapper 的论文设计而来,由 Twitter 公司提供开源实现,主要功能是聚集来自...
spring cloud sleuth stream zipkin and use kafka collector,elasticsearch storage
Zipkin是Twitter的一个开源项目,是一个致力于收集Twitter所有服务的监控数据的分布式跟踪系统,它提供了收集数据,和查询数据两大接口服务。
部署Zipkin环境的操作记录:
分布式跟踪系统—Zipkin
微服务之分布式跟踪系统(springboot+zipkin)
一、zipkin是什么
zipkin是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据...
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
要做微服务首先得把全链路监控搭起来,参考过一些方案,拿其中唯品会的方案来举例:
调用链信息分别存储于 HBase 和 ElasticSearch中,ElasticSearch 单纯承担起类似于 Solr 的角色,查询的时候只需要通过 ElasticSearch 的倒排索引查到相关的 Rowkey 再去 HBase 里通过 Rowkey 查得完整调用链信息,并将起展现出来。
我知道 ElasticSearch 本身其实可以做可靠性存储的,为什么不直接将 Trace 调用链信息全量存入 ElasticSearch 中,这里借用 HBase 意义何在?
如果是为了后续的批处理计算,也感觉不妥,ES 也有 hadoop插件,可以做集成。如果说 HBase 能够承受更大的吞吐,感觉也不对,ES 能承受的吞吐也不小。
关于这个问题我依旧思考不出个所以然来,忘各位给出见解,谢谢了!
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
唯品会是如何设计的不是太清楚。
我知道 twitter 开源的zipkin分布式追踪系统是直接将trace信息直接存储在 elasticsearch 中的。当然zipkin还支持很多其它的存储方式如mysql/nosql。
条条大路通罗马。我认为不需要太纠结于别人为什么要这样选择,更多应该关注别人做成了什么。这当中有很多原因外人是无法知道的,也许就是个人便好,也许跟公司内部技术有关,也许有其它考量。但是至少有一点是可以确定的要实现相同的功能,并不一定要选择hbase + elasticsearch才能完成。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
hbase算是基本版本。想要做分析还是得用es。
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:Zipkin是一个分布式跟踪系统。(Zipkin is a distributed tracing system.)
你的姓名 *
电子邮件 *
文本内容 *
The OpenZipkin Authors
LinuxWindowsMac OS X / macOSBSDSolarisOS Independent
当前稳定版
最近更新日期
Zipkin是分布式跟踪系统。 它有助于收集在微服务架构中排除延迟问题所需的定时数据。 它管理这些数据的收集和查找。 Zipkin的设计是基于。应用程序用于向 Zipkin 报告时间数据。 Zipkin UI还提供了一个依赖关系图,显示了每个应用程序经过多少追踪请求。如果要解决延迟问题或错误,可以根据应用程序、跟踪长度、注释或时间戳来过滤或排序所有跟踪。 选择跟踪后,您可以看到每个跨度所需的总跟踪时间的百分比,从而允许您识别问题应用程序。该项目包括一个无依赖库和一个
服务器。 存储选项包括内存、JDBC(mysql)、Cassandra和Elasticsearch。
Useful resources:

我要回帖

更多关于 elasticsearch jdbc 的文章

 

随机推荐