5

我正在使用 Graphite 和 Collectd 来监控我的服务器。特别是,我使用tail插件来计算失败的 SSH 登录。我正在使用一个计数器来衡量这个指标,所以希望看到 1、2、3、0 等......作为数据点。但是,我看到的是 0.1、0.2、0.3、0 等……在我看来,Graphite 正在提供每秒计数。我这样说是因为我的保留策略是每 10 秒一个数据点,持续两个小时。所以每 10 秒 1 次登录失败 = 每秒 0.1 次。我在图表中查看这个。它看起来像这样:

图片

此外,当我扩展到下一个保留级别时,数字会相应调整:因此显示为 0.1 的 1 次登录失败现在显示为远低于此值:0.017 或其他值。

我不认为这与使用的聚合方法有关:即使是最好的数据也是关闭的。如何让 Graphite 将此指标视为纯粹的原始计数器?

这是我的 storage-schemas.conf(保留策略):

[my_server]
pattern = .*
retentions = 10s:2h,1m:2d,30m:400d

这是我对 collectd tail 插件的配置:

<Plugin "tail">
    <File "/var/log/auth.log">
            Instance "auth"
            <Match>
                    Regex "sshd[^:]*: Failed password"
                    DSType "CounterInc"
                    Type "counter"
                    Instance "sshd-invalid_user"
            </Match>
    </File>
</Plugin>

这是我对 write_graphite 插件的配置(将数据发送到石墨):

<Plugin write_graphite>
    <Node "my_server_name">
            Host "localhost"
            Port "2003"
            Protocol "tcp"
            LogSendErrors true
            Prefix "collectd."
            #Postfix ""
            StoreRates true
            AlwaysAppendDS false
            EscapeCharacter "_"
    </Node>
</Plugin>

我尝试设置StoreRates falsewrite_graphite 插件,但这不起作用。它确实改变了行为:当我执行一次失败的 SSH 登录时,该指标显示为 1。但是,它并没有回落到 0。当我再执行两次失败的登录时,该指标弹出到 3。

同样有趣的是:我还加载了用户插件,它只显示登录的用户数量,它工作得很好:当我 SSH 进入时显示 1,当我再次 SSH 进入时显示 2,当我退出一个 SSH 时返回 1。对于 StoreRates 的两种设置。所以看起来我想要的东西是可能的。也许不是尾插件。

StoreRates false在这些图中可以看到SSH 登录以及登录用户的正确行为:

图片

有任何想法吗?谢谢,

4

3 回答 3

3

您正在要求系统计算事件的数量。这正是它正在做的事情:它计算自启动以来登录失败的次数。无论您使用StoreRates与否,都只是简单地改变了信息的显示方式:作为速率或作为原始计数器。计数器可能永远不会减少!您实际上要求的是一个计数器,它在读取时会自行重置:计算自上次 collectd 检查以来登录失败的次数。

碰巧ABSOLUTE可以使用 rrdtool 中的数据源类型来实现这一点,但这对您没有帮助。

退后一步,想想你想要达到的目标:每秒登录失败的次数在我看来是一个非常合理的指标!

于 2014-08-17T08:04:15.597 回答
2

尽管 swissunix 的回答非常有帮助,但为了实现我一直在寻找的行为,我最终使用了Logster而不是 Collectd。使用 Logster,您可以编写解析文件的代码以及返回指标的代码。因此,尽管 Logster 很常见将计数除以时间,但如果您不想这样做,则不必这样做:有很大的灵活性。

我把我的解析器放在这里:https ://github.com/camlee/logster-parsers

于 2014-09-30T05:03:41.270 回答
2

如果将 StoreRates 设置为 false,则在石墨中,您可以将导数函数应用于不断增加的计数器,以获得每个保留间隔的增加率,这将符合您的要求。

例如,在您报告 1 次登录失败,然后是 2 次的示例中,您看到了值 1 和 3。导数是 1 和 2:石墨跟踪的每个间隔的失败日志。

于 2015-06-20T12:53:06.763 回答