从Kafka读取警报,然后使用其配置的通知方法通知客户。

monasca-notification的Python项目详细描述


团队和存储库标记

https://governance.openstack.org/tc/badges/monasca-notification.svg

通知引擎

此引擎从Kafka读取警报,然后使用 配置的通知方法。多次通知并重试 引擎可以并行运行,每个可用的kafka分区最多运行一个引擎。 zookeeper用于在 新进程加入或离开工作集。

架构

通知引擎使用以下命令生成通知 步骤:

  1. 从卡夫卡读取警报,没有自动提交。- monasca_common.kafka.kafkaconsumer类
  2. 确定报警的通知类型。通过从mysql读取完成。-报警处理器类
  3. 发送通知。-通知处理器类
  4. 将成功的通知添加到已发送通知主题。-通知引擎类
  5. 将失败的通知添加到重试主题。-通知引擎类
  6. 提交到kafka的偏移量-kafkaconsumer类

通知引擎使用三个kafka主题:

  1. 报警主题:进入通知引擎的报警。
  2. 通知主题:已成功发送通知。
  3. 通知重试主题:失败的通知。

重试引擎与通知引擎并行运行,并给出 任何失败的通知 成功。

重试引擎使用以下步骤生成通知:

  1. 从kafka读取通知json数据,不需要自动提交。-Kafkaconsumer类
  2. 重新生成失败的通知。-retryengine类
  3. 发送通知。-通知处理器类
  4. 将成功的通知添加到已发送通知主题。-retryengine类
  5. 将未达到重试限制的失败通知添加回重试主题。- retryengine类
  6. 放弃已达到重试限制的失败通知。-retryengine类
  7. 提交到卡夫卡的偏移量。-Kafkaconsumer类

重试引擎使用两个kafka主题:

  1. 通知重试主题:需要重试的通知。
  2. 通知主题:已成功发送通知。

容错性

从报警主题读取时,不执行提交。承诺 只有在处理后才能完成。这样可以继续处理 即使有些通知可能很慢。如果发生 灾难性故障可以发送一些通知,但警报 尚未得到承认。这是一种可接受的故障模式, 两次发送通知总比一次都不发送好。

遇到重大错误时的一般过程是退出 允许其他进程重新协商对 卡夫卡分区。还假设通知引擎 将由进程管理器运行,如果出现 失败。这样,任何不容易恢复的错误都是 由服务重新启动和活动守护进程自动处理 切换到另一个实例。

虽然这应该涵盖所有错误,但存在报警或 可以处理一组报警并发送多个通知 时代。为了将这种风险降到最低,我们使用了许多技术:

  • 所有通知类型都实现超时。
  • 使用报警TTL。任何早于TTL的警报 处理。

操作

oslo.config用于处理配置选项。样品 配置文件etc/monasca/notification.conf.sample可以是 运行生成:

tox -e genconfig

使用默认配置文件位置运行服务 of/etc/monasca/notification.conf

monasca-notification

要运行服务并显式指定配置文件:

monasca-notification --config-file /etc/monasca/monasca-notification.conf

监测

statsd被合并到守护进程中,并将所有统计信息发送到 由Monasca代理启动的StatSD服务器。默认主机和端口指向 localhost:8125

  • 计数器
    • 从卡夫卡消费
    • AlarmsFailedParse
    • 警报无通知
    • 通知已创建
    • 通知sentstp
    • 通知sentwebhook
    • 通知sentpagerduty
    • 通知发送失败
    • 通知有效类型
    • 警报完成
    • 发表于《东京邮报》
  • 计时器
    • 配置时间
    • 发送通知时间

未来考虑因素

  • 需要更广泛的负载测试:

    • How fast is the mysql db? How much load do we put on it. Initially I think it makes most sense to read notification details for each alarm but eventually I may want to cache that info.
    • How expensive are commits to Kafka for every message we read? Should we commit every N messages?
    • How efficient is the default Kafka consumer batch size?
    • Currently we can get ~200 notifications per second per NotificationEngine instance using webhooks to a local http server. Is that fast enough?
    • Are we putting too much load on Kafka at ~200 commits per second?

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应该考虑使用DTO来代替Spring控制器层吗?   java为什么要将Maven与Git结合起来?   java试图将CSV转换为XLSX,但使用了错误的逗号拆分列   mysql Spring 3+Hibernate:java。sql。BatchUpdateException:无法添加或更新子行(ManyToMany)   java基本字符串反转器   java无法使用RestControllerAdvice为身份验证失败生成自定义错误消息   java当只允许SQLException时,如何抛出EOFEException?   java如何创建播放模块?   Android中匿名类的java实例化异常问题   java两个停靠组件,其中第二个组件填充剩余空间   java如何在按钮延迟时启用它   Java中正在运行的应用程序中的后台进程   java我正试图从一个字符串打印出这个字符输出   如何使用java socket通过两个不同的wifi连接两台电脑?   javaapachecamel:如何将分层数据从数据库转换为pojo   java Webrtc:OniconConnectionChange和onConnectionChange之间有什么区别   java如何重写已经创建的JTable方法   爪哇扫雷机堆垛机   雅加达ee Java ee EJB 3.0 Glassfish