Syslog-ng 到 Azure 事件中心

Syslog-ng 到 Azure 事件中心

我希望将特定日志从我的 syslog-ng 集群发送到 Azure 事件中心,以便它可以利用 ADX 而不是 Log Analytics 工作区。

根据 syslog-ng 网站上的文档(这里),配置看起来非常简单,但我似乎无法让它工作。下面是我现在配置的净化版本。

destination d_AzureEventHub {
    http(
            url("https://XXXXX.servicebus.windows.net/YYYYY")
            #tls( ca-dir("/etc/syslog-ng/ca.d") )
            tls( ca-file("/etc/ssl/certs/ca-bundle.crt") )
            method("POST")
            headers(
                    "Authorization: SharedAccessSignature sr=XXXXX.servicebus.windows.net%YYYYY%2f&sig=ZZZZZZZZZZZZZZZZZ=RootManageSharedAccessKey",
                    "Content-Type: application/atom+xml;type=entry;charset=utf-8"
            )
    );

通过此设置,我收到以下 syslog-ng 错误。

syslog-ng[7253]: 服务器返回 4XX(客户端错误)状态代码,这意味着我们未获得授权或未找到 URL。;

在日志中进一步显示它为 401 错误。

我尝试删除“SharedAccessSignature”部分,但仍然出现同样的错误。此外,如果我使用我列出的 ca-dir,我也会收到此错误。请注意,该目录中有我下载的 DigiCert 根的 .crt 和 .pem 文件。

error='Peer certificate cannot be authenticated with given CA certificates'

我对授权部分感到困惑。我尝试使用基本共享访问策略密钥以及从密钥创建 SAS 令牌。这两种方法似乎都无法让我成功连接。

我也不确定授权应该采用什么格式。如能得到任何帮助我将不胜感激。

答案1

最终发现是 TLS 文件 + SAS 令牌的格式 + URL 不正确的组合问题。

对于独立系统来说,使用基本的 /etc/ssl/certs/ca-bundle.crt 文件就足够了。从 SAS 令牌格式来看,页面非常有用。它还提供了 curl 命令,说明如何在 syslog-ng 之外进行测试,以确保这是 token 与 syslog-ng 的问题。

不过,最重要的还是 URL。与 syslog-ng 文档相比,我必须使用它才能让一切正常运转。

https://XXXXX.servicebus.windows.net/YYYYY/messages?timeout=60\&api-version=2014-01

相关内容