当前位置: 首页 > 知识库问答 >
问题:

如何让Graphite简单地计数计数器,而不是对它们进行计时

詹高畅
2023-03-14

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

此外,当我扩展到下一个保留级别时,数字会相应地进行调整:因此,显示为0.1的1次失败登录现在会显示为比0.017小得多。

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

这是我的存储模式。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插件(它向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>

我尝试为write_graphite插件设置<code>StoreRates false

同样有趣的是:我还加载了用户插件,它只显示登录的用户数量,并且工作得很好:当我SSH进入时显示1,当我再次SSH时显示两个,当我退出一个SSH时显示回1。对于存储速率的两个设置。所以似乎我想要的在某种程度上是可能的。也许不是用尾巴塞。

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

有什么想法吗?谢谢,

共有3个答案

辛健
2023-03-14

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

E、 g.在您报告1失败登录,然后报告2的示例中,您看到值1和3。导数为1和2:graphite跟踪的每个间隔的失败日志。

傅浩漫
2023-03-14

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

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

李和昶
2023-03-14

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

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

退后一步,想想你想实现的目标:在我看来,每秒失败的登录次数似乎是一个完全理智的指标!

 类似资料:
  • 我能够通过注册和注销侦听器来开始和停止使用录制步骤。 但是,当应用程序被销毁时,通过< code>SensorEvent对象传递给我的应用程序的实际值不会重置为零。如果我关闭应用程序并重新启动它,或者即使我用更新重新编译我的应用程序,计数器也会从它停止的地方开始计数。 如果我运行其他使用步数计数器传感器的应用程序,它们会独立计算步数并重置计数器。 传感器是否有特定于应用程序的缓存?将传感器重置为零

  • 除了对反向列表理解进行列表理解之外,是否有一种pythonic方法按值对计数器进行排序?如果是这样,它比这更快:

  • 我试图找到唯一的单词,以及它们重复了多少次。 尝试用python编写相同的代码。 输入数据集: 输出数据集:

  • 我有一个简单的程序,有一个TextView和两个按钮:Button1和Button2。 单击按钮1将启动一个计数器,每1秒增加1并在TextView上显示结果;点击按钮2将停止它。这是我为Button1编写的代码的一部分。但它不起作用。 我知道有一些关于使用线程的类似问题,但似乎他们没有提到停止计数器。 非常感谢您的任何建议。 补充: 你好,我刚刚将我的代码从一个更大的程序缩短到这个,但它仍然崩溃

  • 我们目前的生态系统是graphite/grafana,我们使用codahale metrics java库。 我定义了一个计数器 每次点击我们的应用程序都会增加 我们通过codahale观察到的是,计数器是一个累加值。。。当我们查看grafana中的原始数据时,它在一段时间内是一个不断增加的值 我在graphite中使用了哪些函数,以便获得每分钟的请求计数 我试过这个 还有这个 这似乎是不对的,有

  • 问题内容: 我想提取结果并计算每个名称中有多少被提取但没有分组… 例如我想要这样: 而不是这样: 那有意义吗? 谢谢。 问题答案: