opensource4you / astraea

釋放kafka的無限潛能
Apache License 2.0
130 stars 46 forks source link

可快速顯示叢集效能相關參數的工具 #10

Closed chia7712 closed 2 years ago

chia7712 commented 3 years ago

目的

效能驗證後,除了常見的吞吐量和延遲以外,我們也需要知道各個叢集在這一次測試中,各個節點各自貢獻了多少力氣

預期可看到的指標

  1. 平均requests數量
  2. 平均吞吐量
  3. 記憶體使用狀況
  4. I/O and Network threads使用狀況

可能的使用方式

./bin/metrics_tools.sh --bootstrap.servers=192.168.50.178:15626

output

===[server 0]====
10000 write requests/sec
1000 read requests/sec
100 MB/sec
...

tasks

From https://github.com/skiptests/astraea/pull/14#discussion_r706036944

garyparrot commented 3 years ago

@chia7712 問個小問題, 我們的程式碼是不是應該寫在自己建立的獨立 Gradle subproject [1]。 感覺這樣我們的 metrics tool 的依賴(JCommander & others)不會汙染到其他 subproject。

謝謝

[1] https://docs.gradle.org/current/userguide/multi_project_builds.html#sec:creating_multi_project_builds

chia7712 commented 3 years ago

考量程式碼之間可能的依賴,我們先用同一個module,如此簡化專案結構,如果我們專案真的成長到一個非常龐大的狀態,可以到時候再來切割

garyparrot commented 3 years ago

實作一個 Utility, 能夠取得 broker 的 raw metrics 實作一個物件/機制/函式庫可以索取特定的 Kafka broker metrics

@chia7712 這兩個 task 我要不要先處理後者,感覺上後者的急迫性比較高

雖然上面這麼說,不過我已經大致上想好 raw metrics tool 的 command-line usage 了,我先貼在下面讓大家看看有沒有問題

我 metrics tool 使用上主要分成兩個考量,給人用(usage 1)和給腳本或其他工具串接用(usage 2)

########
Usage 1:
./mbean-explorer <where are the hosts> [domain scope] [how to fetch] [how to display]

1. where is the host
--servers

2. domain scope
--domain <domain>                  (domain to search, by default is "*")

3. how to fetch
--all                              (default option, all mbeans)
--search <string>                  (search any property key/value contain string)
--search-key <string>              (search any property key contain string)
--search-value <string>            (search any property value contain string)
--properties <properties-list>     (search by given property list)

4. how to display the result
--show human                       (default, show data in human-friendly way, maybe with color)
--show object-name                 (show object name only, one line each)
--show object-name-tree            (show object name only, display as a tree (like how JMC show it))
--show csv                         (output as CSV format)

Example:

./mbean-explorer --servers localhost:5566                                (search all mbeans)
./mbean-explorer --servers localhost:5566 --search /tmp/kafka-logs       (looking for mbean related to the log dir)
./mbean-explorer --servers localhost:5566 --search-key logDirectory      (try to find all mbean related to logDirectory)
./mbean-explorer --servers localhost:5566 --search-value Fetch           (try to looking for RequestMetrics of Fetch)
./mbean-explorer --servers localhost:5566 --properties logDirectory="/tmp/kafka-logs"

########
Usage 2:
./mbean-explorer <where are the hosts> --fetch <ObjectName> [how to display]

--fetch <object-name>              (use raw ObjectName to fetch data)

Example

./mbean-explorer --servers localhost:5566 --fetch java.lang:type=Memory
chia7712 commented 3 years ago

這兩個 task 我要不要先處理後者,感覺上後者的急迫性比較高

沒錯,後者現階段比較重要 @wycccccc FYI

--servers

這個能否統一成"--bootstrap.servers"?

另一個需要確認的規格為: 有哪些metrics跟效能最有關係?這需要@wycccccc一起討論,現階段用來評分的指標有哪些?kafka有四個重要的硬體效能: cpu, memory, disk I/O, network I/O,這四個分別需要看哪些metrics? 可能要麻煩條列整理一下

garyparrot commented 3 years ago

這個能否統一成"--bootstrap.servers"?

這部分很難說,我當初的考量是,我們是在連 JMX 而非 Kafka RPC ,所以擔心混用會引發誤會

chia7712 commented 3 years ago

這部分很難說,我當初的考量是,我們是在連 JMX 而非 Kafka RPC ,所以擔心混用會引發誤會

你說的對,我剛剛忘記是要連jmx server了。那就保持你原本的命名~

chia7712 commented 3 years ago

cpu, memory, disk I/O, network I/O,這四個分別需要看哪些metrics? 可能要麻煩條列整理一下

可以參考: https://docs.confluent.io/platform/current/kafka/monitoring.html

garyparrot commented 2 years ago

實作一工具能檢視當前叢集的效能狀態

@chia7712 這個部分可以直接用 Grafana 配上 node_exporter 嗎

chia7712 commented 2 years ago

這個部分可以直接用 Grafana 配上 node_exporter 嗎

當然,可以試試看現在腳本裡的prometheus如何整合Grafana