如何在 Filebeat/ELK 中为不同的日志定义单独的索引?
How to define seperated indexes for different logs in Filebeat/ELK?
我想知道如何为提取到 logstash
(后来传递到 elasticsearch
)的不同日志创建单独的索引,以便在 kibana
中,我可以定义两个索引为他们发现他们。
就我而言,我有几个客户端服务器(每个都安装了 filebeat
)和一个集中式日志服务器(ELK
)。每个客户端服务器都有不同种类的日志,例如redis.log
, python
logs, mongodb
logs, 我喜欢将它们分类到不同的索引中并存储在 elasticsearch
.
每个客户端服务器也有不同的用途,例如数据库、用户界面、应用程序。因此我也喜欢给它们不同的索引名称(通过在 filebeat.yml
? 中更改输出索引)。
在 logstash 中,您可以借助标签定义多个输入、过滤器或输出插件:
input {
file {
type => "redis"
path => "/home/redis/log"
}
file {
type => "python"
path => "/home/python/log"
}
}
filter {
if [type] == "redis" {
# processing .......
}
if [type] == "python" {
# processing .......
}
}
output {
if [type] == "redis" {
# output to elasticsearch redis
index => "redis"
}
if [type] == "python" {
# output to elasticsearch python
index => "python"
}
}
在您的 Filebeat 配置中,您可以使用 document_type
来识别您拥有的不同日志。然后在 Logstash 内部,您可以设置 type
字段的值来控制目标索引。
然而,在将日志分成不同的索引之前,您应该考虑将它们留在单个索引中并使用 type
或一些 custom field to distinguish between log types. See index vs type.
示例 Filebeat 探矿者配置:
filebeat:
prospectors:
- paths:
- /var/log/redis/*.log
document_type: redis
- paths:
- /var/log/python/*.log
document_type: python
- paths:
- /var/log/mongodb/*.log
document_type: mongodb
示例 Logstash 配置:
input {
beats {
port => 5044
}
}
output {
# Customize elasticsearch output for Filebeat.
if [@metadata][beat] == "filebeat" {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
# Use the Filebeat document_type value for the Elasticsearch index name.
index => "%{[@metadata][type]}-%{+YYYY.MM.dd}"
document_type => "log"
}
}
}
filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /var/log/*.log
fields: {log_type: toolsmessage}
- input_type: log
paths:
- /etc/httpd/logs/ssl_access_*
fields: {log_type: toolsaccess}
在 logstash.conf.
input {
beats {
port => "5043"
}
}
filter {
if ([fields][log_type] == "toolsmessage") {
mutate {
replace => {
"[type]" => "toolsmessage"
}
}
}
else if ([fields][log_type] == "toolsaccess") {
mutate {
replace => {
"[type]" => "toolsaccess"
}
}
}
}
output {
elasticsearch {
hosts => ["10.111.119.211:9200"]
index => "%{type}_index"
}
#stdout { codec => rubydebug }
}
以上内容我都看过了。
找到我的路。
input {
stdin {
}
jdbc {
type => "jdbc"
....
}
http_poller {
type=>"api"
....
}
}
filter {
....
}
output {
elasticsearch {
hosts => ["jlkjkljljkljk"]
index => "%{type}_index"
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
我想知道如何为提取到 logstash
(后来传递到 elasticsearch
)的不同日志创建单独的索引,以便在 kibana
中,我可以定义两个索引为他们发现他们。
就我而言,我有几个客户端服务器(每个都安装了 filebeat
)和一个集中式日志服务器(ELK
)。每个客户端服务器都有不同种类的日志,例如redis.log
, python
logs, mongodb
logs, 我喜欢将它们分类到不同的索引中并存储在 elasticsearch
.
每个客户端服务器也有不同的用途,例如数据库、用户界面、应用程序。因此我也喜欢给它们不同的索引名称(通过在 filebeat.yml
? 中更改输出索引)。
在 logstash 中,您可以借助标签定义多个输入、过滤器或输出插件:
input {
file {
type => "redis"
path => "/home/redis/log"
}
file {
type => "python"
path => "/home/python/log"
}
}
filter {
if [type] == "redis" {
# processing .......
}
if [type] == "python" {
# processing .......
}
}
output {
if [type] == "redis" {
# output to elasticsearch redis
index => "redis"
}
if [type] == "python" {
# output to elasticsearch python
index => "python"
}
}
在您的 Filebeat 配置中,您可以使用 document_type
来识别您拥有的不同日志。然后在 Logstash 内部,您可以设置 type
字段的值来控制目标索引。
然而,在将日志分成不同的索引之前,您应该考虑将它们留在单个索引中并使用 type
或一些 custom field to distinguish between log types. See index vs type.
示例 Filebeat 探矿者配置:
filebeat:
prospectors:
- paths:
- /var/log/redis/*.log
document_type: redis
- paths:
- /var/log/python/*.log
document_type: python
- paths:
- /var/log/mongodb/*.log
document_type: mongodb
示例 Logstash 配置:
input {
beats {
port => 5044
}
}
output {
# Customize elasticsearch output for Filebeat.
if [@metadata][beat] == "filebeat" {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
# Use the Filebeat document_type value for the Elasticsearch index name.
index => "%{[@metadata][type]}-%{+YYYY.MM.dd}"
document_type => "log"
}
}
}
filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /var/log/*.log
fields: {log_type: toolsmessage}
- input_type: log
paths:
- /etc/httpd/logs/ssl_access_*
fields: {log_type: toolsaccess}
在 logstash.conf.
input {
beats {
port => "5043"
}
}
filter {
if ([fields][log_type] == "toolsmessage") {
mutate {
replace => {
"[type]" => "toolsmessage"
}
}
}
else if ([fields][log_type] == "toolsaccess") {
mutate {
replace => {
"[type]" => "toolsaccess"
}
}
}
}
output {
elasticsearch {
hosts => ["10.111.119.211:9200"]
index => "%{type}_index"
}
#stdout { codec => rubydebug }
}
以上内容我都看过了。 找到我的路。
input {
stdin {
}
jdbc {
type => "jdbc"
....
}
http_poller {
type=>"api"
....
}
}
filter {
....
}
output {
elasticsearch {
hosts => ["jlkjkljljkljk"]
index => "%{type}_index"
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}