zipkin-server
Zipkin Server 是一個 Java 1.8+ 服務,打包為一個可執行的 jar。 跨度存儲和收集器是可配置的。默認情況下,存儲在內存中,啟用 HTTP 收集器(POST /api/v2/spans 端點),服務器偵聽端口 9411。 Zipkin Server 使用 Armeria 實現。 雖然它在內部使用 Spring Boot (打開新窗口)
,不應將 Zipkin Server 視為普通的 Spring Boot 應用程序。
https://github.com/openzipkin/zipkin/blob/master/zipkin-server/README.md
不支持自定義服務器
不支持通過類似於 spring boot 應用程序添加 zipkin-server
引用這種方式來構建服務。
快速啟動
最快的上手方式是通過 最新 jar 發布服務器 獲取一個獨立的可執行jar。請注意,Zipkin 服務器需要最低 JRE 8。
$ curl -sSL https://zipkin.io/quickstart.sh | bash -s
$ java -jar zipkin.jar
啟動后,瀏覽 http://your_host:9411 驗證
端點
以下端點在服務基礎url http://your_host:9411 下定義
- / - UI
- /config.json - UI 配置
- /api/v2 - API
- /health - 如果正常則返回 200
- /info - 提供正在運行的實例的版本
- /metrics - 包括按傳輸類型細分的收集器指標
- /prometheus - Prometheus 抓取端點
舊版 /api/v1 API 仍然支持。后端通過數據轉換與 HTTP API 分離。這意味着您仍然可以在新后端接受舊數據,反之亦然。進入 https://zipkin.io/zipkin-api/zipkin-api.yaml
Swagger UI 的探索框查看舊定義
CORS(跨域資源共享)
默認情況下,所有端點 /api/v2
都配置為允許跨域請求。
這可以通過修改 zipkin.query.allowed-origins
屬性來改變。
例如,要允許來自 http://foo.bar.com
域名下的 CORS 請求:
ZIPKIN_QUERY_ALLOWED_ORIGINS=http://foo.bar.com
更多的相關配置請看 這里 。
服務和跨度名稱查詢
Zipkin API 不包括返回多遠查找服務或跨度名稱的參數。為了防止負載過大,服務和跨度名稱查詢通過配置
QUERY_LOOKBACK
限制,默認為24小時(每天兩個桶:今天一個,昨天一個)
日志
默認情況下, zipkin 以 INFO 或更高級別將日志寫入控制台。所以可以通過配置 logging.level.XXX
屬性調整日志級別
例如,如果您想為所有 zipkin 類別啟用調試日志記錄,您可以像這樣啟動服務器:
$ java -jar zipkin.jar --logging.level.zipkin2=DEBUG
更多的相關配置請看 這里 。
高級日志配置
實際上,服務器使用 Spring Boot - Logback集成 處理日志,所以可以通過配置 --logging.exception-conversion-word=%wEx{full}
轉儲完整堆棧跟蹤而不是截斷的跟蹤。
Metrics
收集器指標被導出到路徑 /metrics
。這些和其他指標被導出到路徑 /prometheus
。
示例 Prometheus 配置
Here's an example /prometheus
configuration, using the Prometheus
exposition [text format version 0.0.4]
這是一個示例 /prometheus
配置,使用 Prometheus exposition文本格式版本 0.0.4
- job_name: 'zipkin'
scrape_interval: 5s
metrics_path: '/prometheus'
static_configs:
- targets: ['localhost:9411']
metric_relabel_configs:
# Response code count
- source_labels: [__name__]
regex: '^status_(\d+)_(.*)$'
replacement: '${1}'
target_label: status
- source_labels: [__name__]
regex: '^status_(\d+)_(.*)$'
replacement: '${2}'
target_label: path
- source_labels: [__name__]
regex: '^status_(\d+)_(.*)$'
replacement: 'http_requests_total'
target_label: __name__
收集器
Metric 收集器按傳輸細分。以下內容被導出到 /metrics
端點:
Metric | 說明 |
---|---|
counter.zipkin_collector.messages.$transport | 收到的累積消息;應該與檢測應用程序報告的消息相關 |
counter.zipkin_collector.messages_dropped.$transport | 累積消息丟棄;原因包括客戶端斷開連接或格式錯誤的內容 |
counter.zipkin_collector.bytes.$transport | 累積消息字節 |
counter.zipkin_collector.spans.$transport | 累積跨度讀取;應該與檢測應用程序報告的消息相關 |
counter.zipkin_collector.spans_dropped.$transport | 累積跨度下降;原因包括采樣或存儲故障 |
gauge.zipkin_collector.message_spans.$transport | 消息中的最后一個跨度計數 |
gauge.zipkin_collector.message_bytes.$transport | 消息中的最后一個字節數 |
配置
我們支持 ENV 變量配置,例如 STORAGE_TYPE=cassandra3
,因為它們為管理員所熟悉,並且易於在 Docker 等運行時環境中使用
以下是 Zipkin 的頂層配置:
QUERY_PORT
: HTTP API 和 Web UI 的監聽端口;默認為9411
QUERY_ENABLED
: 配置false
禁用 '/api/v2' 端點。這也會導致 UI 不可用,因為 UI 依賴於 API。 如果您的唯一目標是限制搜索, 請配置SEARCH_ENABLED
為false
SEARCH_ENABLED
:false
禁用查詢 API 中的搜索以及收集器中的任何索引或后處理以支持搜索。這不會禁用整個 UI ,因為按 ID 和依賴項查詢的跟蹤仍在運行。當您使用其他服務(例如日志)來查找跟蹤 ID 時禁用此功能。默認為 trueQUERY_TIMEOUT
: 設置查詢請求的硬超時。接受任何持續時間字符串(例如,100ms
)。值0
將完全禁用超時。默認為11s
。QUERY_LOG_LEVEL
: 寫入控制台的日志級別;默認為INFO
QUERY_NAMES_MAX_AGE
: 控制 zipkin-server 對 UI 請求的最大響應時間。默認為 300 秒。QUERY_LOOKBACK
: 從 endTs 可以回溯多少毫秒查詢;默認為 24 小時(每天兩個時段:今天一個,昨天一個)STORAGE_TYPE
: SpanStore 實現:mem
,mysql
,cassandra3
,elasticsearch
中取一個COLLECTOR_SAMPLE_RATE
: 保留的記錄道百分比,默認為“始終采樣”(1.0)。AUTOCOMPLETE_KEYS
: 會通過/api/v2/autocompleteTags
端點返回的跨度標簽鍵列表;標簽鍵應以逗號分隔,例如 "instance_id,user_id,env"AUTOCOMPLETE_TTL
: 以毫秒為單位抑制調用寫入相同的自動完成鍵/值對的時間。默認 3600000(1 小時)
配置文件覆蓋
在場景下,所有配置都由 Spring Boot 管理。這意味着屬性也可能被系統屬性或 Spring Boot 支持的任何其他替代方案覆蓋
我們使用 yaml 配置將更短或更慣用的 ENV 變量綁定到最終使用的 Spring 屬性。雖然大多數用戶應該只使用環境變量,但有些用戶可能希望使用屬性文件方法來覆蓋設置。例如,知道我們設置 spring.config.name=zipkin-server
了 ,Spring Boot 會自動在當前目錄中查找一個名為的文件 zipkin-server.properties
,並且可以通過這種方式覆蓋我們在 yaml 中設置的相同屬性。
如果您選擇使用基於屬性的配置而不是 ENV 變量,那么您就是在自定義配置。這意味着您將使用 Spring Boot 文檔 或 堆棧溢出 解決參數配置問題,而不是提出問題或使用我們的聊天支持。我們必須提到這一點,因為 Spring 的配置通常消耗資源很大,我們必須為 Zipkin 相關任務盡可能節省資源。
UI
Zipkin 有一個 Web UI,自動包含在 exec jar 中,默認托管在端口 9411 上。
當 UI 加載時,它會從 /config.json
端點讀取默認配置。
屬性 | 值 | 描述 |
---|---|---|
environment | zipkin.ui.environment | 這里的值變成右上角的標簽。非必填 |
defaultLookback | zipkin.ui.default-lookback | 查找跟蹤時回溯的默認持續時間(以毫秒為單位)。影響 UI 中的“開始時間”元素。默認為 900000(以毫秒為單位的 15 分鍾) |
searchEnabled | zipkin.ui.search-enabled | 如果啟用了 Discover 屏幕。默認為真 |
queryLimit | zipkin.ui.query-limit | 查找 track 的默認限制。默認為 10 |
instrumented | zipkin.ui.instrumented | 此 Zipkin UI 涵蓋哪些站點,正則表達式語法案例 http:\/\/example.com\/.* ,默認 (.* ) 包含所有站點 |
logsUrl | zipkin.ui.logs-url | 記錄查詢服務 url 模式。如果指定,將在跟蹤頁面上顯示一個按鈕,並將 URL 中的 {traceId} 替換為 traceId。非必填 |
supportUrl | zipkin.ui.support-url | 用戶可以請求支持的 URL。如果指定,將在側面菜單中放置指向此 URL 的鏈接,例如用於提交支持票的頁面。非必填 |
archivePostUrl | zipkin.ui.archive-post-url | 以 Zipkin v2 json 格式發布當前跟蹤的 URL。例如 https://longterm/api/v2/spans 。如果指定,一個按鈕將相應地出現在跟蹤頁面上。非必填 |
archiveUrl | zipkin.ui.archive-url | 提供歸檔跟蹤的 Web 應用程序的 URL,以“{traceId}”為模板。例如 https://longterm/zipkin/trace/{traceId} 。跟蹤成功發布到“archivePostUrl”后,確認消息中會顯示此信息.非必填 |
dependency.enabled | zipkin.ui.dependency.enabled | UI 依賴項展示是否啟用. 默認為 true |
dependency.lowErrorRate | zipkin.ui.dependency.low-error-rate | 依賴項鏈接變黃的錯誤率閾值。默認值為 0.5 (50%) 設置為 >1 以禁用 |
dependency.highErrorRate | zipkin.ui.dependency.high-error-rate | 依賴項鏈接變紅的錯誤率閾值。默認值為 0.75 (75%) 設置為 >1 以禁用 |
basePath | zipkin.ui.basepath | 放置在 UI HTML 標簽中的路徑前綴;在反向代理后面運行時很有用。默認 /zipkin |
要將屬性映射到環境變量,請將它們更改為大寫下划線格式。例如,如果使用 docker,您可以設置 ZIPKIN_UI_QUERY_LIMIT=100 相當於 $.queryLimit
在 /config.json
跟蹤存檔
大多數生產 Zipkin 集群使用有限的 TTL 存儲跟蹤。這使得共享跟蹤有點不方便,因為它的鏈接將在幾天后過期。
"跟蹤歸檔" 功能對此有所幫助。啟動第二個 zipkin 服務器,指向一個比常規的 TTL 更長的存儲,並設置 archivePostUrl 和 archiveUrl UI 配置指向這第二個服務器。設置 archivePostUrl 后,跟蹤視圖頁面上將出現一個新的 "Archive Trace" 按鈕。
存儲
基於內存存儲
Zipkin 的 內存存儲 將所有數據保存在內存中,根據跨度限制清除舊數據。它適用於 STORAGE_TYPE
未設置或設置為 mem
MEM_MAX_SPANS
: 超過此限制時,將首先清除最舊的記錄道(及其跨度)。默認為 500000
示例用法:
$ java -jar zipkin.jar
::: danger 警告
注意:這個存儲組件主要是為測試而開發的,也是一種在沒有外部依賴的情況下快速啟動和運行 Zipkin 服務器的方法。它對於高工作量是不可行的。也就是說,如果您遇到內存不足錯誤,請嘗試減少 MEM_MAX_SPANS 或增加堆大小 (-Xmx)。 將內存中保存的跨度數量加倍的示例:
將內存中保存的跨度數量加倍的示例:
$ MEM_MAX_SPANS=1000000 java -Xmx1G -jar zipkin.jar
:::
Cassandra 存儲
Zipkin 的 Cassandra 存儲組件支持 3.11.3+ 版本
::: tip Cassandra 相關配置
當 STORAGE_TYPE
設置為 cassandra3
時,以下配置生效:
CASSANDRA_KEYSPACE
: 要使用的鍵空間,默認為: "zipkin2"
CASSANDRA_CONTACT_POINTS
: 以逗號分隔的主機地址列表配置 Cassandra 集群。還可以使用 host:port
指定自定義端口。默認為本地主機上的 9042 端口。
CASSANDRA_LOCAL_DC
: 將被視為負載平衡的 local 數據中心的名稱。默認為 datacenter1
CASSANDRA_ENSURE_SCHEMA
: 確保 cassandra 使用最新模式。如果啟用則嘗試執行以 cassandra-schema-cql3
的前綴的腳本. 默認為 true
CASSANDRA_USERNAME
:Cassandra 認證賬號
CASSANDRA_PASSWORD
: Cassandra 認證密碼,如果認真失敗會拋出錯誤,未設置默認值。
CASSANDRA_USE_SSL
: 需要 javax.net.ssl.trustStore
和 javax.net.ssl.trustStorePassword
, 默認為 false.
以下是可能不涉及所有用戶的調整參數:
CASSANDRA_MAX_CONNECTIONS
: 每個數據中心本地主機的最大池連接數。默認為8CASSANDRA_INDEX_CACHE_MAX
: 要緩存的最大跟蹤索引元數據項。零禁用緩存。默認值為100000。CASSANDRA_INDEX_CACHE_TTL
: 緩存跟蹤的索引元數據需要多少秒。默認值為60。CASSANDRA_INDEX_FETCH_MULTIPLIER
: 要獲取的索引行比用戶提供的查詢限制多多少。默認為3。
:::
使用 Cassandra 和請求日志記錄的示例用法(TRACE 顯示查詢值):
$ STORAGE_TYPE=cassandra3 java -jar zipkin.jar \
--logging.level.com.datastax.oss.driver.internal.core.tracker.RequestLogger=DEBUG
Elasticsearch 存儲
Zipkin 的 Elasticsearch 存儲組件支持 5-7.x 版本
::: tip Elasticsearch 相關配置
當 STORAGE_TYPE
設置為 elasticsearch
時,以下配置生效:
ES_HOSTS
: 以逗號分隔的 elasticsearch 連接 url 列表,默認值為: "http://localhost:9200"ES_PIPELINE
: 指示為跨距編制索引之前使用的攝取管道,無默認值ES_TIMEOUT
: 配置 Elasticsearch API 的連接、讀寫超時時間,默認值為 10000 (10秒)ES_INDEX
: 生成每日索引名稱時要使用的索引前綴,默認值為: zipkin.ES_DATE_SEPARATOR
: 生成每日索引名稱時要使用的日期分隔符,默認值為: '-' .ES_INDEX_SHARDS
: 索引分片數。每個碎片及其副本分配給群集中的一台機器。增加碎片的數量集群中的機器將提高讀寫性能。無法更改現有索引的碎片數量,但可以更改新的每日索引。默認為 5ES_INDEX_REPLICAS
: 索引碎片副本數。相對條件下數值越大讀性能越好,寫性能越差。默認值為 1 。設置為 0 意味着機器故障很大可能會導致數據丟失。ES_ENSURE_TEMPLATES
: 缺失時安裝Zipkin索引模板。將此設置為 false ,當索引模板與預期不匹配時,會導致數據損壞。如果如果將其設置為 true ,則會自動處理數據故障或遷移問題,而不是依靠人工手動來解決。默認為trueES_USERNAME
andES_PASSWORD
: Elasticsearch基本身份驗證,默認為空字符串。當X-Pack安全(以前稱為Shield)就位時使用。ES_CREDENTIALS_FILE
: ES 認證憑據文件位置, 包含以下屬性,該文件優先級大於 ES_USERNAME 與 ES_PASSWORD 配置zipkin.storage.elasticsearch.username
:用戶名zipkin.storage.elasticsearch.password
:密碼
ES_CREDENTIALS_REFRESH_INTERVAL
: 定期刷新ES_CREDENTIALS_FILE
文件周期(單位:秒),默認值為:1ES_HTTP_LOGGING
: 設置后,配置 Elasticsearch API 的 HTTP 日志記錄,包含:Options are BASIC, HEADERS, BODYES_SSL_NO_VERIFY
: 如果為true,則禁用服務器密鑰證書鏈的驗證。這不適合生產。默認為false。ES_TEMPLATE_PRIORITY
: 可組合索引模板的優先級值。這僅適用於ES 7.8或更高版本。必須設置為0才能使用可組合模板
:::
使用示例:
簡單連接 ES :
$ STORAGE_TYPE=elasticsearch ES_HOSTS=http://myhost:9200 java -jar zipkin.jar
記錄 ES http 請求日志:
$ STORAGE_TYPE=elasticsearch ES_HTTP_LOGGING=BASIC java -jar zipkin.jar
使用自定義密鑰庫或信任庫 (SSL)
如果您的 Elasticsearch 端點自定義 SSL 配置(例如自簽名)證書,您可以使用以下任何 JSSE 屬性子集 連接。
- javax.net.ssl.keyStore
- javax.net.ssl.keyStorePassword
- javax.net.ssl.keyStoreType
- javax.net.ssl.trustStore
- javax.net.ssl.trustStorePassword
- javax.net.ssl.trustStoreType
使用示例:
$ JAVA_OPTS='-Djavax.net.ssl.keyStore=keystore.p12 -Djavax.net.ssl.keyStorePassword=keypassword -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.trustStore=truststore.p12 -Djavax.net.ssl.trustStorePassword=trustpassword -Djavax.net.ssl.trustStoreType=PKCS12'
$ STORAGE_TYPE=elasticsearch java $JAVA_OPTS -jar zipkin.jar
在該場景下,這些映射到屬性 prefixed zipkin.storage.elasticsearch.ssl.
,這會影響用於連接到 Elasticsearch 的 Armeria 客戶端。
上述屬性允許最常見的 SSL 開箱即用的設置。如果您需要更多定制,請提交 issue
自動創建索引
當需要的時候 Zipkin 自動創建 ES 索引。 Elasticsearch 默認 允許 自動創建索引, 你可以在集群中驗證這個設置: action.auto_create_index: false
.
MySQL 存儲
Zipkin 的 MySQL 存儲組件支持 5.7 版本
當 STORAGE_TYPE
設置為 mysql
時,以下屬性生效:
MYSQL_DB
: MySQL 使用數據庫,默認為 "zipkin".MYSQL_USER
andMYSQL_PASS
: MySQL 認證信息, 默認值為空.MYSQL_HOST
: 默認值為 localhostMYSQL_TCP_PORT
: 默認值為 3306MYSQL_MAX_CONNECTIONS
: MySQL 最大連接數, defaults to 10MYSQL_USE_SSL
: 需要javax.net.ssl.trustStore
andjavax.net.ssl.trustStorePassword
, 默認為 false.
注意:不建議將此模塊用於生產用途。使用前,需要進行以下環境配置:
# Barracuda supports compression (In AWS RDS, this must be assigned in a parameter group)
$ mysql -uroot -e "SET GLOBAL innodb_file_format=Barracuda"
# This command should work even in RDS, and return "Barracuda"
$ mysql -uroot -e "show global variables like 'innodb_file_format'"
# install the schema and indexes
# sql 文件獲取:https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql
$ mysql -uroot -e "create database if not exists zipkin"
$ mysql -uroot -Dzipkin < zipkin-storage/mysql-v1/src/main/resources/mysql.sql
或者,您可以 MYSQL_JDBC_URL
自己使用並指定完整的 JDBC url。請注意,使用上述單獨設置構建的 URL 還將包含以下參數: ?autoReconnect=true&useSSL=false&useUnicode=yes&characterEncoding=UTF-8
。
示例用法:
$ STORAGE_TYPE=mysql MYSQL_USER=root java -jar zipkin.jar
Throttled 存儲 (實驗性)
這些設置可用於幫助調整 Zipkin 將數據刷新到另一個底層 StorageComponent
(例如 Elasticsearch)的速率:
STORAGE_THROTTLE_ENABLED
: Enables throttlingSTORAGE_THROTTLE_MIN_CONCURRENCY
: Minimum number of Threads to use for writing to storage.STORAGE_THROTTLE_MAX_CONCURRENCY
: Maximum number of Threads to use for writing to storage.STORAGE_THROTTLE_MAX_QUEUE_SIZE
: How many messages to buffer while all Threads are writing data before abandoning a message (0 = no buffering).
由於此功能是實驗性的,因此不建議在生產環境中運行此功能。
收集器
HTTP 收集器
HTTP 收集器默認啟用。 他支持 POST /api/v1/spans
and POST /api/v2/spans
.
HTTP 收集器默支持以下配置:
環境變量 | 屬性 | 描述 |
---|---|---|
COLLECTOR_HTTP_ENABLED |
zipkin.collector.http.enabled |
false 禁用 HTTP 收集器。默認為 true |
Scribe (Legacy) Collector
支持 Scribe 的收集器在 COLLECTOR_SCRIBE_ENABLED=true
時啟用. 不鼓勵新站點使用此收集器,因為 Scribe 是一種存檔技術。
環境變量 | 屬性 | 描述 |
---|---|---|
COLLECTOR_PORT |
zipkin.collector.scribe.port |
監聽 thrift RPC scribe 請求的端口。默認為 9410 |
SCRIBE_CATEGORY |
zipkin.collector.scribe.category |
類別 zipkin 將從中消耗。默認為 zipkin |
ActiveMQ 收集器
Zipkin 的 ActiveMQ 收集器組件支持 v5.x 版本,當配置 ACTIVEMQ_URL
值時啟用,支持以下屬性配置
環境變量 | 屬性 | 描述 |
---|---|---|
COLLECTOR_ACTIVEMQ_ENABLED |
zipkin.collector.activemq.enabled |
false 禁用 ActiveMQ 收集器。默認為 true . |
ACTIVEMQ_URL |
zipkin.collector.activemq.url |
Connection URL 連接設置, 例如 tcp://localhost:61616 或 failover:(tcp://localhost:61616,tcp://remotehost:61616) |
ACTIVEMQ_QUEUE |
zipkin.collector.activemq.queue |
從中收集消息的隊列名稱。 默認為 zipkin |
ACTIVEMQ_CLIENT_ID_PREFIX |
zipkin.collector.activemq.client-id-prefix |
隊列使用者的客戶端ID前綴。默認為 zipkin |
ACTIVEMQ_CONCURRENCY |
zipkin.collector.activemq.concurrency |
並發消費數量。 默認為 1 |
ACTIVEMQ_USERNAME |
zipkin.collector.activemq.username |
ActiveMQ 連接用戶名 |
ACTIVEMQ_PASSWORD |
zipkin.collector.activemq.password |
ActiveMQ 連接密碼 |
示例用法:
$ ACTIVEMQ_URL=tcp://localhost:61616 java -jar zipkin.jar
Kafka 收集器
Zipkin 的 Kafka 收集器組件支持 v0.10+ 版本,當配置 KAFKA_BOOTSTRAP_SERVERS
值時啟用,支持以下屬性配置
關於 kafka 的新消費者配置請看 這里.
變量 | New Consumer Config | 描述 |
---|---|---|
COLLECTOR_KAFKA_ENABLED |
N/A | false 禁用 Kafka 收集器。默認為 true . |
KAFKA_BOOTSTRAP_SERVERS |
bootstrap.servers | 以逗號分隔的連接配置列表, 例如: 127.0.0.1:9092。無默認值 |
KAFKA_GROUP_ID |
group.id | 此進程所代表的消費組。默認為 zipkin |
KAFKA_TOPIC |
N/A | kafka 消費者 topic 配置。默認為 zipkin |
KAFKA_STREAMS |
N/A | topic 消費線程數。默認為 1 |
示例用法:
$ KAFKA_BOOTSTRAP_SERVERS=127.0.0.1:9092 java -jar zipkin.jar
其他的 kafka 消費者屬性配置
您可能需要設置其他 Kafka 消費者屬性,除了由收集器定義的具有顯式屬性的那些。在這種情況下,您需要在該屬性名稱前面加上前綴 zipkin.collector.kafka.overrides
並將其作為系統屬性參數傳遞。
例如,要覆蓋 auto.offset.reset
屬性, 你需要設置一個名為 zipkin.collector.kafka.overrides.auto.offset.reset
的屬性:
$ KAFKA_BOOTSTRAP_SERVERS=127.0.0.1:9092 \
java -Dzipkin.collector.kafka.overrides.auto.offset.reset=latest -jar zipkin.jar
詳細示例
針對在 Docker 中運行的 Kafka 的示例:
$ export KAFKA_BOOTSTRAP_SERVERS=$(docker-machine ip `docker-machine active`)
# 后台運行 kafka
$ docker run -d -p 9092:9092 \
--env ADVERTISED_HOST=$KAFKA_BOOTSTRAP_SERVERS \
--env AUTO_CREATE_TOPICS=true \
spotify/kafka
# 通過 $KAFKA_BOOTSTRAP_SERVERS 環境變臉啟動 zipkin 服務
$ java -jar zipkin.jar
多個 bootstrap servers 配置:
$ KAFKA_BOOTSTRAP_SERVERS=broker1.local:9092,broker2.local:9092 \
java -jar zipkin.jar
備用 topic 名稱配置:
$ KAFKA_BOOTSTRAP_SERVERS=127.0.0.1:9092 \
java -Dzipkin.collector.kafka.topic=zapkin,zipken -jar zipkin.jar
將 bootstrap servers 指定為系統屬性,而不是環境變量:
$ java -Dzipkin.collector.kafka.bootstrap-servers=127.0.0.1:9092 \
-jar zipkin.jar
RabbitMQ 收集器
當設置 addresses
或 uri
的時候, RabbitMQ 收集器 會啟動
示例用法:
$ RABBIT_ADDRESSES=localhost java -jar zipkin.jar
gRPC 收集器 (實驗性)
您可以通過設置 COLLECTOR_GRPC_ENABLED=true
啟用 gRPC 收集器端點。 zipkin.proto3.SpanService/Report
端點會和普通 http 服務一樣運行。
示例用法:
$ COLLECTOR_GRPC_ENABLED=true java -jar zipkin.jar
由於此服務是實驗性的,因此不建議在生產環境中運行此服務。
自我追蹤
存在自我跟蹤以幫助解決 zipkin 服務器的性能問題。在生產部署應該將自我跟蹤的應將采樣率從 1.0 (100%) 降低到更小的速率,例如 0.001(0.1% 或千分之一)。
當配置 zipkin.self-tracing.enabled=true
, Zipkin 將自動啟動對服務 "zipkin-server" 的 API 的調用進行自我追蹤
變量 | 屬性 | 描述 |
---|---|---|
SELF_TRACING_ENABLED | zipkin.self-tracing.enabled | 設置為 true 以啟用自我跟蹤。默認為 false |
SELF_TRACING_SAMPLE_RATE | zipkin.self-tracing.sample-rate | 要保留的自我跟蹤的百分比,默認為始終采樣 (1.0)。 |
SELF_TRACING_FLUSH_INTERVAL | zipkin.self-tracing.flush-interval | 將自跟蹤數據刷新到存儲的時間間隔(以秒為單位)。默認為 1 |
128 位跟蹤 ID
Zipkin 支持 64 位和 128 位跟蹤標識符,通常序列化為 16 或 32 個字符的十六進制字符串。默認情況下,向 zipkin 報告的具有相同跟蹤 ID 的跨度將被考慮在同一跟蹤中。
例如, 463ac35c9f6413ad48485a3953bb6124
是 128 位的跟蹤 ID,而 48485a3953bb6124
是 64 位的。
注意:跟蹤中的跨度(或父)ID 是 64 位的,無論其跟蹤 ID 的長度或值如何
從 64 位遷移到 128 位跟蹤 ID
除非您在所有應用程序都支持時僅發出 128 位跟蹤,否則將應用程序從 64 位跟蹤 ID 更新到 128 位跟蹤 ID 的過程會導致混合狀態。這種混合狀態通過設置 STRICT_TRACE_ID=false
來緩解。如下所述,遷移完成后,刪除 STRICT_TRACE_ID=false
設置,或者將其設置為 true
以下是一些跟蹤ID,它們可以幫助您了解此設置過程中發生的情況。
- Trace ID A: 463ac35c9f6413ad48485a3953bb6124
- Trace ID B: 48485a3953bb6124
- Trace ID C: 463ac35c9f6413adf1a48a8cff464e0e
- Trace ID D: 463ac35c9f6413ad
在 64 位環境中,跟蹤 ID 看起來像上面的 B 或 D。當應用程序升級到 128 位檢測並決定創建 128 位跟蹤時,其跟蹤 ID 將類似於上面的 A 或 C。
尚不支持 128 位的應用程序通常只保留跟蹤 ID 最右邊的 16 個字符。發生這種情況時,同一跟蹤可能會報告為跟蹤 ID A 或跟蹤 ID B。
默認情況下,Zipkin 會認為這些是不同的跟蹤 ID,因為它們是不同的字符串。在從 64 位到 128 位跟蹤 ID 的轉換過程中,跨度將出現在兩個 ID 之間。例如,它可能以跟蹤 ID A 開始,但下一躍點可能會將其截斷為跟蹤 ID B。這會使系統無法用於執行升級的應用程序。
解決此問題的一種方法是在所有應用程序都支持之前不使用 128 位跟蹤 ID。這以協調為代價防止了混合情況。另一種方法是設置 STRICT_TRACE_ID=false
當設置 STRICT_TRACE_ID=false
,在對跟蹤進行分組或檢索時,只考慮 32 個字符的跟蹤 ID 中最右邊的 16 個。此設置應僅在從 64 位跟蹤 ID 轉換到 128 位跟蹤 ID 時應用,並在轉換完成后刪除。
請查看 https://github.com/openzipkin/b3-propagation/issues/6 了解 128 位跟蹤標識符上已知開源庫的狀態。
查看源碼 zipkin2.storage.StorageComponent.Builder
了解更多信息
TLS/SSL
如果需要,可以使 Zipkin-server 與 TLS 一起運行:
# assuming you generate the key like this
keytool -genkeypair -alias mysite -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore zipkin.p12 -validity 3650
java -jar zipkin.jar --armeria.ssl.key-store=zipkin.p12 --armeria.ssl.key-store-type=PKCS12 --armeria.ssl.key-store-password=123123 --armeria.ssl.key-alias=mysite --armeria.ssl.enabled=true --armeria.ports[0].port=9411 --armeria.ports[0].protocols[0]=https
運行在 Docker 中
zipkin-server 的發布版本以 openzipkin/zipkin
發布在 Docker Hub 。點擊 docker-zipkin 查看詳情
本地構建
要從源碼構建和運行服務器,請輸入以下內容
# Build the server and also make its dependencies
$ ./mvnw -T1C -q --batch-mode -DskipTests --also-make -pl zipkin-server clean package
# Run the server
$ java -jar ./zipkin-server/target/zipkin-server-*exec.jar
# or Run the slim server
$ java -jar ./zipkin-server/target/zipkin-server-*slim.jar