我很难用Filebeat的Docker自动发现功能来使用定制的Elasticsearch摄取管道。我已经在我的< code>filebeat.yml文件中开始使用自定义处理器,但是我更愿意将它转移到我创建的自定义摄取管道。
首先,这是我使用自定义处理器的配置,它为我的Servarr应用Docker容器提供自定义的类似grok的处理(通过在我的docker-compose.yml文件中对它们应用标签来识别)。处理器将“消息”字段复制为“log.original”,使用剖析提取“log.level”、“log.logger”并覆盖“消息”。最后一个处理器是一个JavaScript函数,用于将log.level转换为小写(也许有点夸张,但幽默我)。
Filebeat配置:
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
reload.period: 60s
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
json.keys_under_root: true
processors:
- if:
equals:
docker.container.labels.co_elastic_logs/custom_processor: servarr
then:
- copy_fields:
fields:
- from: message
to: log.original
fail_on_error: false
ignore_missing: true
- dissect:
tokenizer: "[%{log.level}] %{log.logger}: %{message}"
field: message
target_prefix: ""
overwrite_keys: true
ignore_failure: true
- script:
lang: javascript
id: lowercase
source: >
function process(event) {
var level = event.Get("log.level");
if(level != null) {
event.Put("log.level", level.toString().toLowerCase());
}
}
output.elasticsearch:
hosts: 'elasticsearch:9200'
username: 'elastic'
password: '*************'
setup.kibana.host: 'kibana:5601'
logging.json: true
logging.metrics.enabled: false
docker-compose.yml文件摘录...
lidarr:
image: ghcr.io/linuxserver/lidarr:latest
container_name: lidarr
labels:
co.elastic.logs/custom_processor: "servarr"
和一个示例日志行(在 json 中):
{"log":"[Info] DownloadDecisionMaker: Processing 100 releases \n","stream":"stdout","time":"2021-08-07T10:10:49.125702754Z"}
这很有效,并且实现了我提取字段的目标,但理想情况下,我想使用Elasticsearch的(更强大的)摄取管道,并使用更干净的filebeat.yml
,所以我创建了一个有效的摄取管道“filebeat-7.13.4-servarr-stdout-pipeline”,就像这样(忽略目前,这只做grokking的事实):
[
{
"grok": {
"field": "message",
"patterns": [
"\\[%{LOGLEVEL:log.level}\\] %{WORD:log.logger}: %{GREEDYDATA:message}"
],
"trace_match": true,
"ignore_missing": true
}
}
]
我针对现有文档测试了管道(我应该指出,不是那些应用了我的自定义处理的文档)。该管道适用于我在Kibana界面中测试过的所有文档。
因此,现在我来转移我的Filebeat配置,将这个管道用于带有custom_processor标签的容器。这是<code>文件节拍。yml我提出的,这显然是有效的,在大多数情况下有效,但不适用于摸索:
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
reload.period: 60s
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
json.keys_under_root: true
appenders:
- type: config
condition.equals:
docker.container.labels.co_elastic_logs/custom_processor: servarr
config:
pipeline: filebeat-7.13.4-servarr-stdout-pipeline
output.elasticsearch:
hosts: 'elasticsearch:9200'
username: 'elastic'
password: '*************'
setup.kibana.host: 'kibana:5601'
logging.json: true
logging.metrics.enabled: false
如果我将Filebeat的内置模块用于其他容器(如nginx),通过使用标签(如下面的示例),将使用内置模块管道:
nginx-repo:
image: nginx:latest
container_name: nginx-repo
mem_limit: 2048m
environment:
- VIRTUAL_HOST=repo.***.***.***,repo
- VIRTUAL_PORT=80
- HTTPS_METHOD=noredirect
networks:
- default
- proxy
labels:
co.elastic.logs/module: "nginx"
co.elastic.logs/fileset.stdout: "access"
co.elastic.logs/fileset.stderr: "error"
我到底做错了什么?日志仍然在Elasticsearch和Kibana中结束,并被处理,但是我的grok没有被应用,没有创建新的字段,并且“message”字段没有改变。
编辑:针对链接到弹性论坛上的一篇帖子的评论之一,该评论建议路径和管道都需要明确,我尝试了以下filebeat.yml
自动发现摘录,它也不起作用(但显然是有效的配置):
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
json.keys_under_root: true
appenders:
- type: config
condition:
equals:
docker.container.labels.co_elastic_logs/custom_processor: "servarr"
config:
- type: docker
containers:
ids:
- "${data.docker.container.id}"
stream: all
paths:
- /var/lib/docker/containers/${data.docker.container.id}/${data.docker.container.id}-json.log
pipeline: filebeat-7.13.4-servarr-stdout-pipeline
我尝试使用带引号和不带引号的< code > docker . container . labels . co _ elastic _ logs/custom _ processor 值。我也有同样的行为,日志在Elasticsearch / Kibana中结束,但是它们被处理得好像跳过了我的摄取管道。
我们在Filebeat中使用Kubernetes而不是Docker,但也许我们的配置仍然可以帮助你。
我们启用了自动发现功能,并将所有pod日志发送到公共摄取管道,但使用Redis模块并通过两个自定义摄取管道之一将其日志发送到Elasticsearch的任何Redis pod的日志除外,这取决于它们是普通Redis日志还是slowlog Redis日志,这在以下块中配置:
所有其他检测到的 Pod 日志将使用以下“输出”部分中的 catch-all 配置发送到通用摄取管道:
我们要做的其他事情是使用“set”处理器将摄取管道的名称添加到摄取的文档中:
事实证明,在 Kibana 中查看事件文档时,在诊断管道是否实际执行时,这非常有用。
如何将自定义摄取管道与Filebeat模块一起使用?在我的例子中,我使用的是<code>apache<code>模块。 根据多个来源,这应该可以通过<code>output.elasticsearch进行配置。管道/。资料来源如下: https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html#pi
问题内容: 我知道Android 很棒。它使我们能够播放本地文件以及媒体流。而且非常容易使用(例如): 通过调用具有不同参数集的重载,可以设置不同类型的DataSource 。这个函数有一个有趣的原型: 看起来可以用自己的实现完全覆盖。它确实有效: 并在主要代码中: 是的,这很好。但是,如果我尝试音频/ aacp广播流(例如:“ http://111.223.51.8:8005”-它是“ COOL
问题内容: 我只是开始看一下Mattt出色的新Alamofire快速联网库,并且不确定如何将其与自定义标头一起使用。 我正在尝试从AFNetworking转换为Alamofire的代码是这样的: 问题答案: 根据官方文档,不建议修改会话配置: 不建议将其用于Authorization或Content- Type标头。而是分别使用URLRequestConvertible和ParameterEnco
使装饰器包含具有name属性的管道元数据。 此值将用于在模板表达式中调用此管道。 它必须是有效的JavaScript标识符。 实现PipeTransform接口的transform方法。 此方法接受管道的值和任何类型的可变数量的参数,并返回一个变换的(“管道”)值。 import { Component } from '@angular/core'; selector: 'app-root',
我正在将我的Spring应用程序从Spring-boot 1.5.9迁移到Spring-boot 2.0.0。使用这个新的Spring包,我在Redis中缓存数据时遇到了一些问题。 在我的配置中,我有3个具有不同TTL(长、中、短)的CacheManager: 我还有一个自定义RestTemplate: 在上一个Spring版本中,缓存的每个数据都使用这个RestTemplate,并使用Gener
问题内容: 我无法让spring-data-elasticsearch适用于Elasticsearch 2.0+版本。 关于使用以下POM 并添加自定义的ElasticsearchConfiguration 在 Application.java* 下面 * 在有效的POM中,我仍然收到elasticsearch 1.5.2(以及附加的2.0.1.RELEASE版本)作为依赖项。 在运行应用程序时收