基於 Kafka+ES+Zipkin 搭建鏈路追蹤服務

前言

本文是記錄一下 Window 下 使用 Kafka + ES + Zipkin 搭建一套鏈路追蹤服務教程, 旨在減少各位在學習過程中安裝部署引起的麻煩. 一起學習,共同進步!

1. 所需軟件

  • JDK 1.8 環境
  • kafka 最新版本
  • ElasticSearch-5.6.9(使用版本7 顯示過高,索性找了個靠譜點的)
  • Zipkin-server-2.12.9-exec

2. 配置參數

畢竟只是在 window 做個簡單樣例, 而這些服務默認都需要分配上G的JVM 內存, 資源寶貴, 所以修改各自服務的 JVM 參數, 避免還沒開始,就已結束(系統資源耗盡).

給個參考值: Zipkin 128M, Kafka 256M, ElasticSearch 256M

  • kafka 修改目錄文件: bin\window\kafka-server-start.bat

    需要區別 32位 和 64位系統, 按圖示統一修改爲 256M 即可

    在這裏插入圖片描述

  • ES 目錄文件: config\jvm.options

    這個修改相對簡單一點, 找到 -Xms -Xmx 這兩個參數, 分別設爲 256M 即可

  • Zipkin 會隨着命令行啓動時指定

3. 啓動服務

  1. 啓動 Kafka 服務

    需要依次啓動 zookeeper , kafka server, 創建名爲 zipkin 的主題

    Kafka 相關操作可參考這邊博文 https://blog.csdn.net/YY_WG/article/details/104154823

  2. 啓動 ES

    進入 ES 安裝 bin目錄, 雙擊 elasticsearch.bat 即可, 啓動成功之後, 瀏覽器訪問 http://localhost:9200 查看ES 版本信息, 如下圖
    在這裏插入圖片描述

  3. 啓動 zipkin

    進入到 zipkin 存放目錄, 進入命令行執行以下命令

    java -DKAFKA_BOOTSTRAP_SERVERS=localhost:9092 -DKAFKA_TOPIC=zipkin -DSTORAGE_TYPE=elasticsearch -DES_HOSTS=http://localhost:9200 -Xms256M -Xmx256M -jar zipkin-server-2.12.9-exec.jar
    

    瀏覽器訪問 http://localhost:9411 驗證 zipkin 服務是否成功
    在這裏插入圖片描述

4. 測試

啓動 kafka 生產者

輸入以下數據, 這是一段文本,中間沒有回車符

[{“traceId”:“5982fe77008310cc80f1da5e10147517”,“name”:“get”,“id”:“bd7a977555f6b982”,“timestamp”:1458702548467000,“duration”:386000,“localEndpoint”:{“serviceName”:“zipkin-query”,“ipv4”:“192.168.1.2”,“port”:9411},“annotations”:[{“timestamp”:1458702548467000,“value”:“sr”},{“timestamp”:1458702548853000,“value”:“ss”}]},{“traceId”:“5982fe77008310cc80f1da5e10147517”,“name”:“get-traces”,“id”:“ebf33e1a81dc6f71”,“parentId”:“bd7a977555f6b982”,“timestamp”:1458702548478000,“duration”:354374,“localEndpoint”:{“serviceName”:“zipkin-query”,“ipv4”:“192.168.1.2”,“port”:9411},“tags”:{“lc”:“JDBCSpanStore”,“request”:“QueryRequest{serviceName=zipkin-query,spanName=null,annotations=[],binaryAnnotations={},minDuration=null,maxDuration=null,endTs=1458702548478,lookback=86400000,limit=1}”}},{“traceId”:“5982fe77008310cc80f1da5e10147517”,“name”:“query”,“id”:“be2d01e33cc78d97”,“parentId”:“ebf33e1a81dc6f71”,“timestamp”:1458702548786000,“duration”:13000,“localEndpoint”:{“serviceName”:“zipkin-query”,“ipv4”:“192.168.1.2”,“port”:9411},“remoteEndpoint”:{“serviceName”:“spanstore-jdbc”,“ipv4”:“127.0.0.1”,“port”:3306},“annotations”:[{“timestamp”:1458702548786000,“value”:“cs”},{“timestamp”:1458702548799000,“value”:“cr”}],“tags”:{“jdbc.query”:“selectdistinctzipkin_spans.trace_idfromzipkin_spansjoinzipkin_annotationson(zipkin_spans.trace_id=zipkin_annotations.trace_idandzipkin_spans.id=zipkin_annotations.span_id)where(zipkin_annotations.endpoint_service_name=?andzipkin_spans.start_tsbetween?and?)orderbyzipkin_spans.start_tsdesclimit?”,“sa”:“true”}},{“traceId”:“5982fe77008310cc80f1da5e10147517”,“name”:“query”,“id”:“13038c5fee5a2f2e”,“parentId”:“ebf33e1a81dc6f71”,“timestamp”:1458702548817000,“duration”:1000,“localEndpoint”:{“serviceName”:“zipkin-query”,“ipv4”:“192.168.1.2”,“port”:9411},“remoteEndpoint”:{“serviceName”:“spanstore-jdbc”,“ipv4”:“127.0.0.1”,“port”:3306},“annotations”:[{“timestamp”:1458702548817000,“value”:“cs”},{“timestamp”:1458702548818000,“value”:“cr”}],“tags”:{“jdbc.query”:“selectzipkin_spans.trace_id,zipkin_spans.id,zipkin_spans.name,zipkin_spans.parent_id,zipkin_spans.debug,zipkin_spans.start_ts,zipkin_spans.durationfromzipkin_spanswherezipkin_spans.trace_idin(?)”,“sa”:“true”}},{“traceId”:“5982fe77008310cc80f1da5e10147517”,“name”:“query”,“id”:“37ee55f3d3a94336”,“parentId”:“ebf33e1a81dc6f71”,“timestamp”:1458702548827000,“duration”:2000,“localEndpoint”:{“serviceName”:“zipkin-query”,“ipv4”:“192.168.1.2”,“port”:9411},“remoteEndpoint”:{“serviceName”:“spanstore-jdbc”,“ipv4”:“127.0.0.1”,“port”:3306},“annotations”:[{“timestamp”:1458702548827000,“value”:“cs”},{“timestamp”:1458702548829000,“value”:“cr”}],“tags”:{“jdbc.query”:“selectzipkin_annotations.trace_id,zipkin_annotations.span_id,zipkin_annotations.a_key,zipkin_annotations.a_value,zipkin_annotations.a_type,zipkin_annotations.a_timestamp,zipkin_annotations.endpoint_ipv4,zipkin_annotations.endpoint_port,zipkin_annotations.endpoint_service_namefromzipkin_annotationswherezipkin_annotations.trace_idin(?)orderbyzipkin_annotations.a_timestampasc,zipkin_annotations.a_keyasc”,“sa”:“true”}}]

上面的數據是使用的 zipkin 官網 Data Model 中的示例數據, 只是將回車符全部去掉了, 因爲使用 kafka 客戶端發送消息, 一個回車符 代表一條消息, 這樣發送到 zipkin 中是不完整的.

之後在 zipkin 頁面中按 traceId 搜索, 即會看到和官網圖示一樣的結果
在這裏插入圖片描述
在這裏插入圖片描述
至此, 介紹完畢.

5. 補充

ES 中 瀏覽器查看數據, 沒有裝 head 插件, 可以使用 rest api 來了解一些ES 存儲情況

  • 查看記錄數: http://localhost:9200/_cat/count
  • 查看所有數據: http://localhost:9200/_search?pretty (數據多慎用)
  • 查看各索引數據量: http://localhost:9200/_cat/indices?pretty

*參考資料:*

Kafka 官網
ES 官方API
Zipkin 官網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章