SigNoz是一個開源的應用程序性能監(jiān)控工具,可以幫助你監(jiān)控你的應用程序并排除故障,它可以進行鏈路追蹤、基礎設施監(jiān)控以及日志管理,可以說是Datalog的開源版本。
 前言
SigNoz是一個開源的應用程序性能監(jiān)控工具,可以幫助你監(jiān)控你的應用程序并排除故障,它可以進行鏈路追蹤、基礎設施監(jiān)控以及日志管理,可以說是Datalog的開源版本。
具體的能力如下:
- 監(jiān)控應用程序指標,如延遲、每秒請求、錯誤率等
 - 監(jiān)測基礎設施指標,如CPU利用率或內存使用情況
 - 追蹤跨服務的用戶請求
 - 對指標設置警報
 - 通過查找導致問題的確切痕跡,找到問題的根本原因
 - 查看單個請求追蹤的詳細火焰圖
 
SigNoz包括以下組件。
- OpenTelemetry Collector:從你的服務和應用中收集遙測數(shù)據(jù)。
 - ClickHouse:一個開源的、高性能的列式OLAP數(shù)據(jù)庫管理系統(tǒng)。
 - Query Service:前端和ClickHouse之間的接口
 - Frontend:用戶界面,用ReactJS和TypeScript構建。
 
安裝
前提
- Kubernetes >= 1.21
 - 僅支持x86/amd64架構
 - helm >= 3.8
 - 最低資源需求4C8G30G
 - 有可用的默認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訪問前端應用

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

然后,就進入前端面板。

鏈路追蹤
官方示例
先部署一個官方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ù)自己實際情況修改。
然后看到所有服務都起來了。
# 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
然后使用下面的命令來模擬負載。
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
然后可以看到這些服務的請求鏈路。

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

也可以看整個服務的鏈路圖。

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

然后停止負載模擬:
kubectl -n sample-application run strzal --image=djbingham/curl \
  --restart='OnFailure' -i --tty --rm --command -- curl \
  http://locust-master:8089/stop
應用接入
SigNoz支持多種語言應用的接入,包括不限于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過后,默認是打開了收集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進行測試。
(2)然后選擇測試就可以再webhook.sit上接收到消息

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


然后就能收到告警消息。
