前言
SigNoz是一个开源的应用程序性能监控工具,可以帮助你监控你的应用程序并排除故障,它可以进行链路追踪、基础设施监控以及日志管理,可以说是Datalog的开源版本。
具体的能力如下:
- 监控应用程序指标,如延迟、每秒请求、错误率等
- 监测基础设施指标,如CPU利用率或内存使用情况
- 追踪跨服务的用户请求
- 对指标设置警报
- 通过查找导致问题的确切痕迹,找到问题的根本原因
- 查看单个请求追踪的详细火焰图
SigNoz包括以下组件。
- OpenTelemetry Collector:从你的服务和应用中收集遥测数据。
- ClickHouse:一个开源的、高性能的列式OLAP数据库管理系统。
- 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)创建名称空间
kubectl create ns signoz
(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根据自己实际情况修改。
然后看到所有服务都起来了。
# 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
然后可以看到这些服务的请求链路。
点击其中一个请求,可以看到整个链路状态,如下:
也可以看整个服务的链路图。
还可以查看每个服务的具体延时、错误等面板。
然后停止负载模拟:
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
监控
SigNoz可以接受监控数据,不过我还没研究明白......
日志
安装完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)然后就可以配置告警策略了
然后就能收到告警消息。