2

イベントの値を集計する ElastAlert ルールを作成する必要があります。「値」は、ES ドキュメント内のフィールドの 1 つです。たとえば、すべての値の合計または平均が必要です。

私はPythonが初めてなので、そのようなルールの例がどこかにあるかどうか疑問に思っていました.

4

1 に答える 1

2

たとえば、ドキュメント間で集計された特定の値がしきい値に達したときにアラートをトリガーする場合は、それを行う独自のルールを実装できます。

ドキュメントに記載されているように、最初にelastalert_modules/my_rules.pyというファイルを__ init__.pyファイルの隣に作成します。

次に、my_rules.pyに次のように記述できます。

from elastalert.ruletypes import RuleType

class CountValuesRule(RuleType):

    tracked_values = ['value1', 'value2', 'value3']
    counts = {key: 0 for key in tracked_values}

    # From elastalert docs:
    #     add_data will be called each time Elasticsearch is queried.
    #     data is a list of documents from Elasticsearch, sorted by timestamp,
    #     including all the fields that the config specifies with "include"
    def add_data(self, data):

        def should_trigger(document):
            # here decide if value in counts should trigger alert, for example:
            if self.counts['value1'] > 1000
                return True
            return False

        for document in data:
            # Increment tracked values
            for value in self.tracked_values:
                self.counts[value] += document.get(value, 0)

            if should_trigger(document):
                self.add_match(document)
                # Stop checking other values
                break

    # The results of get_match_str will appear in the alert text
    def get_match_str(self, match):
        return "A value has reached specified threshold. Values: %s" % (str(self.counts))

    # From elastalert docs:
    # garbage_collect is called indicating that ElastAlert has already been run up to timestamp
    # It is useful for knowing that there were no query results from Elasticsearch because
    # add_data will not be called with an empty list
    def garbage_collect(self, timestamp):
        pass

最後に、次のように、構成中のルールにこのカスタム ルールを含めます。

name: Your rule name
es_host: Your host
es_port: Your port
type: "elastalert_modules.my_rules.CountValuesRule"
于 2016-02-26T13:43:23.540 に答える