监控大盘构建
由于dot1x认证使用udp报文;对外监听udp端口,每次读取认证的报文的时候,逻辑都是从listen-fd上读取报文;然后交给业务线程处理,后续处理完毕交给listen-fd发送响应报文;
当然如果发送响应报文的时候创建一个新的fd bind 1812 端口-SO_REUSEPORT;虽然可以发送报文;但是万一此时收到认证报文呢?
此时为了解决此问题,则要保证 recv 那个 fd 不会意外被分到。这个需要用 setsockopt(SO_ATTACH_REUSEPORT_CBPF) 或 BPF 来做 socket 分流,不然会乱。
但是C代码没有协程,只能开启线程池了!
从这个场景来说,go此时真的比c适合实现radius server。
回到当前目标,目前在做radius server 监控指标。业界内监控都是Prometheus+Grafana 实现
部署环境:
被监控设备A处于内网;Prometheus+gfafana处于saas;所以在A上起Prometheus然后remote write到saas;然后gfafana 导入Prometheus数据显示在监控大盘上
目前在radius docker 镜像里面,启动一个Prometheus 进程,target为本地的radius-Prometheus服务; remote url为saas平台Prometheus地址;
saas平台同主机上部署grafanan
saas 平台上启动的Prometheus参数为 docker-compose 参数为
services: prometheus: container_name: saas_prometheus image: xxxxxx/prometheus:v1.1.1 restart: always environment: <<: *encrypted-envs HOST_IP: "${HOST_IPADDR}" env_file: - ${CONFIG_FILE} command: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/home/data/prometheus" - "--storage.tsdb.retention.time=15d" - "--web.config.file=/etc/prometheus/web.yaml" - "--web.console.libraries=/usr/share/prometheus/console_libraries" - "--web.console.templates=/usr/share/prometheus/consoles" - "--web.external-url=http://${HOST_IP}:9090" - "--web.enable-remote-write-receiver"
#对于Prometheus告警规则模板;则放在/etc/prometheus/目录下;
cat prometheus-alerts-rule-test.yml groups: - name: xxxxxx rules: - alert: redisNum expr: readis_nums > 100 for: 1m labels: severity: critical annotations: summary: "redis xxxx" description: "redis{{$labels.ins_id}} xxxx当前数量:{{$value}}" #bypass状态监控 - alert: xxxxxx expr: redis_status > 0 for: 1m labels: severity: warning annotations: summary: "redis xxxx" description: "redis{{$labels.ins_id}} {{$labels.instance}} xxxx:{{$value}}"
参考文档为:
将Prometheus的监控数据接入本地Grafana https://help.aliyun.com/zh/arms/prometheus-monitoring/import-data-from-prometheus-to-local-grafana-systems

浙公网安备 33010602011771号