【发布时间】:2019-08-08 12:58:01
【问题描述】:
我设置 Nginx Plus 来平衡 UDP 系统日志流量。这是来自nginx.conf的sn-p:
stream {
upstream syslog_standard {
zone syslog_zone 64k;
server cp01.woolford.io:1514 max_fails=1 fail_timeout=10s;
server cp02.woolford.io:1514 max_fails=1 fail_timeout=10s;
server cp03.woolford.io:1514 max_fails=1 fail_timeout=10s;
}
server {
listen 514 udp;
proxy_pass syslog_standard;
proxy_bind $remote_addr transparent;
health_check udp;
}
}
听说 NGINX Plus 可以对 UDP 执行健康检查,我有点惊讶,因为 UDP 在设计上是不可靠的。由于 UDP 中没有确认,因此消息实际上进入了黑洞。
我正在尝试建立一个具有一定容错性和可扩展性的系统日志摄取管道。应通过运行状况检查检测到节点丢失,并将其暂时从可用服务器列表中删除。
尽管进行了 UDP 运行状况检查,但这仍然无效。我认为 UDP 健康检查仅适用于响应调用者的服务(例如 DNS)。由于 syslog 没有响应,因此无法检查错误,例如使用match。
摄取系统日志消息的进程侦听端口 1514,并在端口 8073 上有一个 REST 接口:
如果摄取过程正常,则在端口 8073 上向 /connectors/syslog/status 发出 GET 请求返回:
{
"name": "syslog",
"connector": {
"state": "RUNNING",
"worker_id": "10.0.1.41:8073"
},
"tasks": [
{
"id": 0,
"state": "RUNNING",
"worker_id": "10.0.1.41:8073"
}
],
"type": "source"
}
我想创建一个自定义检查以查看摄取是否正在运行。 NGINX Plus 有可能吗?我们可以在完全不同的端口上检查健康状况吗?
【问题讨论】: