从filebeat索引日志时,我在Elasticsearch上面得到了Mapper解析错误.
我尝试了Filebeat - > Elasticserach和Filebeat - > Logstash - > Elasticsearch方法.
我按照他们自己的文档,按照指示安装了filebeat模板,并通过在Elasticsearch中加载索引模板进行验证.Filebeat参考
我的弹性搜索通常与我的其他数据索引工作正常,我在Kibana上测试它们.它是一个官方码头Docker Hub | Elasticsearch安装.
谷歌搜索了很多运气,所以,任何帮助表示赞赏.
更新1:
ES版本:2.3.3(我相信最新版本)
模板文件是filebeat附带的默认文件.
{
"mappings": {
"_default_": {
"_all": {
"norms": false
},
"dynamic_templates": [
{
"fields": {
"mapping": {
"ignore_above": 1024,
"type": "keyword"
},
"match_mapping_type": "string",
"path_match": "fields.*"
}
}
],
"properties": {
"@timestamp": {
"type": "date"
},
"beat": {
"properties": {
"hostname": {
"ignore_above": 1024,
"type": "keyword"
},
"name": {
"ignore_above": 1024,
"type": "keyword"
}
} …
Run Code Online (Sandbox Code Playgroud) 如果一行以03:32:33(时间戳)之类的数字开头,我在匹配时编写文件配置.我目前正在做 -
\d
Run Code Online (Sandbox Code Playgroud)
但它没有得到认可,还有什么我应该做的.我不是特别好/有正则表达式的经验.帮助将不胜感激.
我目前使用filebeat作为日志托运者的架构,它将日志发送到日志存储索引器实例,然后发送到AWS中的托管弹性搜索.由于持久的TCP连接,我无法使用AWS ELB多个日志存储索引器实例进行负载平衡,因为filebeats总是选择实例并将其发送到那里.所以我决定使用redis.现在看看在ELK堆栈中扩展redis并使其高度可用的组件是多么困难,我想问一下redis的重点是什么.我读了一百万次它作为一个缓冲区,但如果logbeash停止发送日志到logstash如果logstash无法处理负载,为什么我们甚至需要一个缓冲区.Filebeat非常聪明,可以知道停止发送日志.如果弹性搜索发生故障,Logstash足够聪明,可以停止向弹性搜索发送日志.所以管道停止了.我真的不明白redis在每个标准ELK架构中充当缓冲区.
我目前正在使用filebeat将日志转发到logstash,然后转发到elasticsearch.
现在,我正在考虑通过rsyslog将日志转发到logstash.这样做的好处是,我不需要在每台服务器上安装和配置filebeat,而且我也可以转发JSON格式的日志,这种格式易于解析和过滤.
我可以使用TCP/UDP通过rsyslog将日志转发到logstash.
我想知道rsyslog优于filebeat的优点和缺点,包括性能,可靠性和易用性.
我正在尝试创建一种导航我的日志文件的方法,我需要的主要功能是:
x
到另一行的分页y
.现在我正在检查Logstash,它看起来很适合我的第一个功能(搜索),但不是第二个功能.我的想法是,我可以以某种方式索引文件行号以及每条记录的日志信息,但我似乎无法找到方法.
是否有某种Logstash过滤器来执行此操作?还是Filebeat处理器?我不能让它发挥作用.
我想也许我可以为我的所有进程创建一种方法来登录带有处理信息的数据库,但这也是不可能的(或非常困难),因为Log Handler也不知道当前的日志行是什么.
最后,我能做的是,为服务分页我的日志文件(通过服务)的方法是实际打开它,导航到一个特定的行并在一个不是最优的服务中显示它作为文件可能非常大,我已经将它索引到Elasticsearch(使用Logstash).
我目前的配置非常简单:
Filebeat
filebeat.prospectors:
- type: log
paths:
- /path/of/logs/*.log
output.logstash:
hosts: ["localhost:5044"]
Run Code Online (Sandbox Code Playgroud)
Logstash
input {
beats {
port => "5044"
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
Run Code Online (Sandbox Code Playgroud)
现在例如我得到的项目如下:
{
"beat": {
"hostname": "my.local",
"name": "my.local",
"version": "6.2.2"
},
"@timestamp": "2018-02-26T04:25:16.832Z",
"host": "my.local",
"tags": [
"beats_input_codec_plain_applied",
],
"prospector": {
"type": "log"
},
"@version": "1",
"message": "2018-02-25 22:37:55 [mylibrary] INFO: this is an example …
Run Code Online (Sandbox Code Playgroud) 查看其中一个 filebeat pod 中的日志,我可以看到以下内容:
2021-01-04T10:10:52.754Z DEBUG [add_cloud_metadata] add_cloud_metadata/providers.go:129 add_cloud_metadata: fetchMetadata ran for 2.351101ms
2021-01-04T10:10:52.754Z INFO [add_cloud_metadata] add_cloud_metadata/add_cloud_metadata.go:93 add_cloud_metadata: hosting provider type detected as openstack, metadata={"ava
ilability_zone":"us-east-1c","instance":{"id":"i-08f536567bd9945df","name":"ip-10-101-2-178.ec2.internal"},"machine":{"type":"m5.2xlarge"},"provider":"openstack"}
2021-01-04T10:10:52.755Z DEBUG [processors] processors/processor.go:120 Generated new processors: add_cloud_metadata={"availability_zone":"us-east-1c","instance":{"id":"i-08f5
36567bd9945df","name":"ip-10-101-2-178.ec2.internal"},"machine":{"type":"m5.2xlarge"},"provider":"openstack"}, add_docker_metadata=[match_fields=[] match_pids=[process.pid, process.ppid]]
2021-01-04T10:10:52.755Z INFO instance/beat.go:392 filebeat stopped.
2021-01-04T10:10:52.755Z ERROR instance/beat.go:956 Exiting: data path already locked by another beat. Please make sure that multiple beats are not sharing the same data path (pat
h.data).
Exiting: data path already locked by another beat. Please make sure …
Run Code Online (Sandbox Code Playgroud) 我正在使用Filebeat将我的本地txt文件中的日志数据发送到Elasticsearch,我想从该message
行添加一些字段到事件 - 如时间戳和日志级别.例如,这是我的一个日志行:
2016-09-22 13:51:02,877 INFO 'start myservice service'
我的问题是:我可以通过Filebeat - > Elasticsearch做到这一点,还是我必须通过Logstash?
我使用以下配置启动了logstash:
在logstash.yml里面:
queue.type: persisted
queue.max_bytes: 8gb
queue.checkpoint.writes: 1
Run Code Online (Sandbox Code Playgroud)
配置文件:
input {
beats {
port => "5043"
}
}
filter {
grok {
match => {
"message" => "%{COMBINEDAPACHELOG}"
}
}
geoip {
source => "clientip"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "test"
document_type => "tw"
}
}
Run Code Online (Sandbox Code Playgroud)
我有这样的情况.
想象一下,弹性搜索被关闭了
现在想象一下,当关闭elasticsearch时,logstash会收到日志记录事件
现在,如果我打开logstash和elasticsearch,logstash不会发送在步骤2中收到的消息 - 即弹性搜索关闭并且logstash正在接收事件.
我从 filebeat 收到此错误:
无法连接到 backoff(elasticsearch( https://elk.example.com:9200 )): 获取https://elk.example.com:9200 : x509: 由未知机构签名的证书
INFO pipeline/output.go:93 尝试重新连接到 backoff(elasticsearch( https://elk.example.com:9200 )) 并进行 1468 次重新连接尝试
INFO [publish] pipeline/retry.go:189 重试器:向消费者发送取消等待信号
信息 [发布] pipeline/retry.go:191 已完成
INFO [publish] pipeline/retry.go:166 重试器:向消费者发送等待信号
信息 [发布] pipeline/retry.go:168 已完成
然而,elasticsearch 通过 LetsEncrypt 拥有有效的 SSL。(这不是自签名证书)。
Filebeat kubernetes 配置:
output.elasticsearch:
hosts: ['${ELASTICSEARCH_HOST:elasticsearch}:${ELASTICSEARCH_PORT:9200}']
username: ${ELASTICSEARCH_USERNAME}
password: ${ELASTICSEARCH_PASSWORD}
Run Code Online (Sandbox Code Playgroud)
我尝试在配置文件中添加这些参数并且它有效。但是,为什么即使证书有效,我也需要绕过验证。
ssl.verification_mode: "none"
Run Code Online (Sandbox Code Playgroud) 当我尝试使用自动发现运行 filebeat 时,出现以下错误:
退出:自动发现提供程序设置中的错误:尝试连接到 unix:///var/run/docker.sock 上的 Docker 守护进程套接字时权限被拒绝:获取 http://%2Fvar%2Frun%2Fdocker.sock/v1。 22/containers/json?limit=0 : 拨打 unix /var/run/docker.sock: 连接: 权限被拒绝
我从 docker 设置在 tcp://localhost:2375 上公开了守护进程。
我检查了我的用户是否是“docker-users”组的成员。
docker-compose.yml:
filebeat:
image: store/elastic/filebeat:7.3.0
volumes:
- ./config/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- /var/lib/docker/containers/:/var/lib/docker/containers/:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
Run Code Online (Sandbox Code Playgroud)