最近希望将现有系统升级到springboot2和spring cloud Finchley ,在升级过程中踩到zipkin的几个坑,记录一下和大家分享。
也就是说原来通过@EnableZipkinServer或@EnableZipkinStreamServer的路子,启动SpringBootApplication自建Zipkin Server是不行了。Spring Cloud Finchley官方文档中直接让我们去参考旧版本的Dalson的文档。
61. Zipkin Stream Span Consumer
[Important] Important
We recommend using Zipkin’s native support for message-based span sending. Starting from the Edgware release, the Zipkin Stream server is deprecated. In the Finchley release, it got removed.
If for some reason you need to create the deprecated Stream Zipkin server, see the Dalston Documentation.
so,只能写shell直接独立启动zipkin-server了。
@ECHO OFF
set RABBIT_ADDRESSES=120.26.57.73:5672
set RABBIT_USER=wmzx
set RABBIT_PASSWORD=wmzx@804
set STORAGE_TYPE=elasticsearch
set ES_HOSTS=http://118.178.241.128:9400
set ES_USERNAME=elastic
set ES_PASSWORD=wmzx@804
set ES_INDEX=zipkin
::windows 10 64bit版本,默认参数启动zipkin server 会报错,Native memory allocation (malloc) failed to allocate 360816 bytes for Chunk::new
::需要增加ReservedCodeCacheSize大小
::linux shell暂未尝试
set JAVA_OPTS="-XX:ReservedCodeCacheSize=64m"
java -jar zipkin-server-2.9.4-exec.jar
开始一直无法启动,一直OOM,然后jvm崩溃。根据hs_err日志文件,尝试修改-Xss -Xms -XX:Metaspace=128m -XX:MaxMetaspaceSize=256m 均无效。
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 360816 bytes for Chunk::new
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
最后-XX:ReservedCodeCacheSize=32m,将默认值32m修改为64m,启动完成。
通过命令行启动,需要手动设置zipkin的收集器和存储的环境变量。查了一下github,这里也搬运记录一下吧。
Property | Environment Variable | Description |
---|---|---|
zipkin.collector.rabbitmq.concurrency | RABBIT_CONCURRENCY | Number of concurrent consumers. Defaults to 1 |
zipkin.collector.rabbitmq.connection-timeout | RABBIT_CONNECTION_TIMEOUT | Milliseconds to wait establishing a connection. Defaults to 60000 (1 minute) |
zipkin.collector.rabbitmq.queue | RABBIT_QUEUE | Queue from which to collect span messages. Defaults to zipkin |
zipkin.collector.rabbitmq.uri | RABBIT_URI | RabbitMQ URI spec-compliant URI, ex. amqp://user:pass@host:10000/vhost |
如果通过URI设置,可以使用下面的环境变量。
Property | Environment Variable | Description |
---|---|---|
zipkin.collector.rabbitmq.addresses | RABBIT_ADDRESSES | Comma-separated list of RabbitMQ addresses, ex. localhost:5672,localhost:5673 |
zipkin.collector.rabbitmq.password | RABBIT_PASSWORD | Password to use when connecting to RabbitMQ. Defaults to guest |
zipkin.collector.rabbitmq.username | RABBIT_USER | Username to use when connecting to RabbitMQ. Defaults to guest |
zipkin.collector.rabbitmq.virtual-host | RABBIT_VIRTUAL_HOST | RabbitMQ virtual host to use. Defaults to / |
zipkin.collector.rabbitmq.use-ssl | RABBIT_USE_SSL | Set to true to use SSL when connecting to RabbitMQ |
生产环境用Elasticsearch 做存储还是很方便的。
* `ES_HOSTS`: A comma separated list of elasticsearch base urls to connect to ex. http://host:9200.
Defaults to "http://localhost:9200".
* `ES_PIPELINE`: Only valid when the destination is Elasticsearch 5+. Indicates the ingest
pipeline used before spans are indexed. No default.
* `ES_TIMEOUT`: Controls the connect, read and write socket timeouts (in milliseconds) for
Elasticsearch Api. Defaults to 10000 (10 seconds)
* `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_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.
* `ES_INDEX_REPLICAS`: The number of replica copies of each shard in the index. Each shard and
its replicas are assigned to a machine in the cluster. Increasing the
number of replicas and machines in the cluster will improve read
performance, but not write performance. Number of replicas can be changed
for existing indices. Defaults to 1. It is highly discouraged to set this
to 0 as it would mean a machine failure results in data loss.
* `ES_USERNAME` and `ES_PASSWORD`: Elasticsearch basic authentication, which defaults to empty string.
Use when X-Pack security (formerly Shield) is in place.
* `ES_HTTP_LOGGING`: When set, controls the volume of HTTP logging of the Elasticsearch Api.
Options are BASIC, HEADERS, BODY
Example usage:
$ STORAGE_TYPE=elasticsearch ES_HOSTS=http://myhost:9200 java -jar zipkin.jar
很多大佬的教程都是用mysql存储zipkin收集的链路信息,mysql的配置如下:
* `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.
Example usage:
$ STORAGE_TYPE=mysql MYSQL_USER=root java -jar zipkin.jar
好了,目前升级到运行阶段就踩了这些坑。后面使用中发现问题,再继续写吧。