SigNoz是一個開源的應(yīng)用程序性能監(jiān)控工具,可以幫助你監(jiān)控你的應(yīng)用程序并排除故障,它可以進(jìn)行鏈路追蹤、基礎(chǔ)設(shè)施監(jiān)控以及日志管理,可以說是Datalog的開源版本。
前言
SigNoz是一個開源的應(yīng)用程序性能監(jiān)控工具,可以幫助你監(jiān)控你的應(yīng)用程序并排除故障,它可以進(jìn)行鏈路追蹤、基礎(chǔ)設(shè)施監(jiān)控以及日志管理,可以說是Datalog的開源版本。
具體的能力如下:
- 監(jiān)控應(yīng)用程序指標(biāo),如延遲、每秒請求、錯誤率等
- 監(jiān)測基礎(chǔ)設(shè)施指標(biāo),如CPU利用率或內(nèi)存使用情況
- 追蹤跨服務(wù)的用戶請求
- 對指標(biāo)設(shè)置警報
- 通過查找導(dǎo)致問題的確切痕跡,找到問題的根本原因
- 查看單個請求追蹤的詳細(xì)火焰圖
SigNoz包括以下組件。
- OpenTelemetry Collector:從你的服務(wù)和應(yīng)用中收集遙測數(shù)據(jù)。
- ClickHouse:一個開源的、高性能的列式OLAP數(shù)據(jù)庫管理系統(tǒng)。
- Query Service:前端和ClickHouse之間的接口
- Frontend:用戶界面,用ReactJS和TypeScript構(gòu)建。
安裝
前提
- Kubernetes >= 1.21
- 僅支持x86/amd64架構(gòu)
- helm >= 3.8
- 最低資源需求4C8G30G
- 有可用的默認(rèn)storageclass
安裝
(1)添加helm倉庫
helm repo add signoz https://charts.signoz.io
helm repo update
(2)創(chuàng)建名稱空間
(3)部署signoz
helm install sigonz -n signoz signoz/signoz
(4)檢查安裝情況
# kubectl get po -n signoz
NAME READY STATUS RESTARTS AGE
chi-signoz-clickhouse-cluster-0-0-0 1/1 Running 0 46m
signoz-alertmanager-0 1/1 Running 0 48m
signoz-clickhouse-operator-7d4677bb47-dzbzm 2/2 Running 0 48m
signoz-frontend-67db9bcf9b-l8x5h 1/1 Running 0 48m
signoz-k8s-infra-otel-agent-hhjxb 1/1 Running 0 48m
signoz-k8s-infra-otel-agent-t9wjr 1/1 Running 0 48m
signoz-k8s-infra-otel-deployment-74fbb7d79-vkm2j 1/1 Running 0 48m
signoz-otel-collector-789cf754fd-nsf6f 1/1 Running 0 48m
signoz-otel-collector-metrics-67449f79f9-cgkm4 1/1 Running 0 48m
signoz-query-service-0 1/1 Running 0 48m
signoz-zookeeper-0 1/1 Running 0 48m
(5)使用nodeport訪問前端應(yīng)用

第一次登錄,需要注冊一個賬戶,如下:

然后,就進(jìn)入前端面板。

鏈路追蹤
官方示例
先部署一個官方demo,來感受一下鏈路追蹤。
# curl -sL https://github.com/SigNoz/signoz/raw/main/sample-apps/hotrod/hotrod-install.sh | HELM_RELEASE=signoz SIGNOZ_NAMESPACE=signoz bash
namespace/sample-application created
configmap/locust-cm created
configmap/scripts-cm created
deployment.apps/hotrod created
service/hotrod created
deployment.apps/locust-master created
service/locust-master created
deployment.apps/locust-slave created
? Successfully deployed HotROD sample application
!! HELM_RELEASE和SIGNOZ_NAMESPACE根據(jù)自己實際情況修改。
然后看到所有服務(wù)都起來了。
# kubectl get po -n sample-application
NAME READY STATUS RESTARTS AGE
hotrod-794648c678-l226b 1/1 Running 0 54s
locust-master-b65744bbf-7hxhc 1/1 Running 0 54s
locust-slave-688c86bcb7-86snl 1/1 Running 0 54s
然后使用下面的命令來模擬負(fù)載。
kubectl --namespace sample-application run strzal --image=djbingham/curl \
--restart='OnFailure' -i --tty --rm --command -- curl -X POST -F \
'locust_count=6' -F 'hatch_rate=2' http://locust-master:8089/swarm
然后可以看到這些服務(wù)的請求鏈路。

點擊其中一個請求,可以看到整個鏈路狀態(tài),如下:

也可以看整個服務(wù)的鏈路圖。

還可以查看每個服務(wù)的具體延時、錯誤等面板。

然后停止負(fù)載模擬:
kubectl -n sample-application run strzal --image=djbingham/curl \
--restart='OnFailure' -i --tty --rm --command -- curl \
http://locust-master:8089/stop
應(yīng)用接入
SigNoz支持多種語言應(yīng)用的接入,包括不限于Python、Java、Golang等。

以Java為例,我們只需要在啟動命令中加入javaagent以及SigNoz地址配置即可,如下:
java -javaagent:/path/opentelemetry-javaagent.jar \
-Dotel.exporter.otlp.endpoint=http://<IP of SigNoz Backend>:4317 \
-Dotel.resource.attributes=service.name=<app_name> \
-jar <myapp>.jar
監(jiān)控
SigNoz可以接受監(jiān)控數(shù)據(jù),不過我還沒研究明白......
日志
安裝完SigNoz過后,默認(rèn)是打開了收集K8s Pod的日志,如下:

我們可以過濾日志,比如只看namespace=monitoring的日志,如下:

其具體的配置文件在value.yaml里,如下:
k8s-infra:
presets:
loggingExporter:
enabled: false
logsCollection:
enabled: true
include:
- /var/log/pods/*/*/*.log
startAt: beginning
includeFilePath: true
includeFileName: false
blacklist:
enabled: true
signozLogs: false
namespaces:
- kube-system
pods:
- hotrod
- locust
containers: []
additionalExclude: []
在使用上還是有不少缺陷,日志查找不是很方便。
告警
(1)首先,添加通知渠道,這里選擇使用Webhook

由于對釘釘支持不友好,使用一個臨時的webhook.sit進(jìn)行測試。
(2)然后選擇測試就可以再webhook.sit上接收到消息

(3)然后就可以配置告警策略了


然后就能收到告警消息。
