我设置了Nginx Plus来负载均衡UDP系统日志流量。这是来自nginx.conf的一个片段
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中没有确认,因此消息实际上进入了黑洞。
我正在尝试建立一个容错和可伸缩的syslog注入管道。应该通过健康检查来检测节点的丢失,并将其从可用服务器列表中临时删除。

尽管进行了UDP运行状况检查,但这并不起作用。我认为UDP运行状况检查只适用于响应调用者的服务(例如DNS)。由于syslog没有响应,因此无法检查错误,例如使用match。
接收syslog消息的进程在端口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可以做到这一点吗?我们可以在完全不同的端口上检查运行状况吗?
发布于 2019-08-08 12:58:02
这是我所做的:
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;
}
match syslog_ingest_test {
send "GET /connectors/syslog/status HTTP/1.0\r\nHost: localhost\r\n\r\n";
expect ~* "RUNNING";
}
server {
listen 514 udp;
proxy_pass syslog_standard;
proxy_bind $remote_addr transparent;
health_check match=syslog_ingest_test port=8073;
}
}match=syslog_ingest_test健康检查对端口8073 (即包含摄取进程的健康检查端点的端口)的URL执行GET请求,并确认它正在运行。
我可以关闭/打开服务,NGINX会检测到它并做出相应的反应。
https://stackoverflow.com/questions/57403725
复制相似问题