事件过滤器
示例
sources:
- name: azure_service_bus
ansible.eda.azure_service_bus:
conn_str: "{{connection_str}}"
queue_name: "{{queue_name}}"
filters:
- json_filter:
include_keys: ['clone_url']
exclude_keys: ['*_url', '_links', 'base', 'sender', 'owner', 'user']
- dashes_to_underscores:
内置事件过滤器
ansible-rulebook 提供了以下内置事件过滤器
eda.builtin.insert_meta_info
eda.builtin.event_splitter
eda.builtin.dashes_to_underscores
eda.builtin.json_filter
eda.builtin.normalize_keys
eda.builtin.insert_hosts_to_meta
eda.builtin.insert_meta_info
event = { ..., 'meta': {'source': {'name': 'azure_service_bus',
'type': 'ansible.eda.azure_service_bus'},
'received_at': '2023-03-23T19:11:15.802274Z',
'uuid': 'eb7de03f-6f8f-4943-b69e-3c90db346edf'}
}
eda.builtin.event_splitter
Name |
描述 |
必填 |
|---|---|---|
splitter_key |
存储事件数组的嵌套键。您可以使用点分隔符来指定路径,例如 incident.alerts |
是 |
attribute_key_map |
如果您需要将父节点的额外属性添加到事件中,请将其指定为字典 |
否 |
extras |
如果您需要向事件中添加静态属性,请将其指定为字典 |
否 |
raise_error |
true 或 false。如果 splitter_key 缺失,我们可以通过将 raise_error 设置为 true 来停止源。默认为 false,如果 splitter_key 缺失,我们将原样返回事件。 |
否 |
示例
sources:
- name: my_prometheus
ansible.eda.alertmanager:
...
filters:
- eda.builtin.event_splitter:
splitter_key: alerts
attributes_key_map:
header: header
hosts: labels.instance
extras:
region: us-east
sources:
- name: my_bigpanda
...big_panda...:
...
filters:
- eda.builtin.event_splitter:
splitter_key: incident.alerts
attributes_key_map:
id: incident.id
active: incident.active
severity: incident.severity
status: incident.status
environments: incident.environments
eda.builtin.dashes_to_underscores
将事件键中的连字符(-)更改为下划线(_)。例如,键 server-name 变为 server_name。该过滤器递归处理所有字典键,包括嵌套在列表中的键。它接受一个参数
Name |
描述 |
必填 |
|---|---|---|
overwrite |
如果在将连字符转换为下划线时发生键冲突,则覆盖值。默认值:true |
否 |
示例
sources:
- name: my_webhook
eda.builtin.webhook:
host: 0.0.0.0
port: 5000
filters:
- eda.builtin.dashes_to_underscores:
overwrite: false
# Input event
{
"server-name": "web01",
"app-version": "1.0"
}
# Output event
{
"server_name": "web01",
"app_version": "1.0"
}
eda.builtin.json_filter
根据包含/排除模式过滤事件中的键。include_keys 参数可防止键被排除(它不充当白名单)。包含模式会覆盖排除模式。
Name |
描述 |
必填 |
|---|---|---|
exclude_keys |
要删除的键模式列表(支持 |
否 |
include_keys |
即使匹配排除模式也要保留的键模式列表 |
否 |
示例
sources:
- name: my_source
eda.builtin.webhook:
host: 0.0.0.0
port: 5000
filters:
- eda.builtin.json_filter:
exclude_keys:
- 'metadata'
- 'internal_*'
include_keys:
- 'internal_id'
# Input event
{
"data": "important",
"metadata": "remove",
"internal_debug": "remove",
"internal_id": "keep"
}
# Output event (internal_id kept despite matching internal_*)
{
"data": "important",
"internal_id": "keep"
}
eda.builtin.normalize_keys
通过将非字母数字字符替换为下划线来规范化键。连续的特殊字符将合并为一个下划线。例如,server.name 变为 server_name,而 server--name 变为 server_name。
Name |
描述 |
必填 |
|---|---|---|
overwrite |
如果在规范化后发生键冲突,则覆盖值。默认值:true |
否 |
示例
sources:
- name: my_source
eda.builtin.webhook:
host: 0.0.0.0
port: 5000
filters:
- eda.builtin.normalize_keys:
# Input event
{
"server.name": "web01",
"app@version": "1.0",
"data--key": "value"
}
# Output event
{
"server_name": "web01",
"app_version": "1.0",
"data_key": "value"
}
eda.builtin.insert_hosts_to_meta
从事件数据中提取主机并将其插入到 meta 字典中。在 ansible-rulebook 中,这将限制操作仅在 meta 字典中指定的主机上运行。
Name |
描述 |
必填 |
|---|---|---|
host_path |
事件数据中用于查找主机的 JSON 路径(使用点号表示法) |
是 |
path_separator |
用于解析 host_path 的分隔符。默认值:“.” |
否 |
host_separator |
如果主机字符串包含多个主机,则用于拆分主机的分隔符 |
否 |
raise_error |
如果 host_path 不存在则抛出错误。建议在开发时使用。默认值:false |
否 |
log_error |
如果 host_path 不存在则记录错误。默认值:true |
否 |
示例
sources:
- name: my_alertmanager
ansible.eda.alertmanager:
host: 0.0.0.0
port: 5050
filters:
- eda.builtin.insert_hosts_to_meta:
host_path: "alert.target"
path_separator: "."
raise_error: true
# Input event
{
"alert": {
"target": "server1.example.com",
"severity": "critical"
}
}
# Output event
{
"alert": {
"target": "server1.example.com",
"severity": "critical"
},
"meta": {
"hosts": ["server1.example.com"]
}
}