附加技巧

步骤流程:

使用filebeat收集一台主机上两个不同应用的日志,传递给redis,然后logstash从redis中拉去数据传递给elasticsearch

1.filebeat.yml文件配置

filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/openresty/nginx/logs/host.access.log # 假设应用1的日志路径
fields:
log_source: messages # logstash判断日志来源 - type: log
enabled: true
paths:
- /usr/local/openresty/nginx/logs/error.log # 假设应用2的日志路径
fields:
log_source: secure # 输出到redis的第一个数据库
# 默认是list形式
output.redis:
hosts: ["192.168.80.107:6379"]
key: messages_secure # redis中的键,值是一个列表,俩表中存储的一行一行的上面两个应用的日志,logstash中会用到这个参数
password: foobar2000 # redis访问密码
db: 0

2.logstash目录下conf.d/*.conf文件配置

input {
redis {
host => "192.168.80.107"
port => 6379
password => foobar2000 # redis访问密码
data_type => "list" # redis存储的值类型
key => "messages_secure" # redis中的键,跟filebeat.yml配置文件中输出到redis.output一样
db => 0 # 指定的redis数据库
}
} output {
# 根据redis键 messages_secure 对应的列表值中,每一行数据的其中一个参数来判断日志来源
if [fields][log_source] == 'messages' {
elasticsearch {
hosts => ["http://192.168.80.104:9200", "http://192.168.80.105:9200","http://192.168.80.106:9200"]
index => "filebeat-message-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "elastic123"
}
} if [fields][log_source] == 'secure' {
elasticsearch {
hosts => ["http://192.168.80.104:9200", "http://192.168.80.105:9200","http://192.168.80.106:9200"]
index => "filebeat-secure-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "elastic123"
}
}
}

如下是redis列表值中的两条不同的数据,删除元数据后的数据

fields字段值是在filebeat.yml中设置的,根据这个值得不同,进而在elasticsearch中创建不同的索引

{
"fields": {
"log_source": "secure"
}, "log": {
"offset": 12944,
"file": {
"path": "/usr/local/openresty/nginx/logs/error.log"
}
},
"message": "2019/08/28 00:01:47 [error] 6764#6764: *4 open() \"/usr/local/openresty/nginx/html/lua\" failed (2: No such file or directory), client: 192.168.80.1, server: localhost, request: \"GET /lua HTTP/1.1\", host: \"192.168.80.108\"", } {
"log": {
"offset": 723861,
"file": {
"path": "/usr/local/openresty/nginx/logs/host.access.log"
}
},
"message": "192.168.80.1 - - [28/Aug/2019:00:01:47 +0800] \"GET /lua HTTP/1.1\" 404 131 \"-\" \"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0\" \"-\"",
"fields": {
"log_source": "messages"
},
}

研究:若是俩应用的日志想分别输出到redis不同的库,设置不同的redis键,要如何操作?

  1. filebeat.inputs写俩的话,默认最后一个secure的生效才会收集日志,messages的不会生效收集日志,比如下面的写法:

filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/openresty/nginx/logs/host.access.log # 假设应用1的日志路径
fields:
log_source: messages # logstash判断日志来源 filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/openresty/nginx/logs/error.log # 假设应用2的日志路径
fields:
log_source: secure

2.output.redis写俩的话默认最后一个的bbb生效,比如下面的这种写法:

filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/openresty/nginx/logs/host.access.log # 假设应用1的日志路径
fields:
log_source: messages # logstash判断日志来源 - type: log
enabled: true
paths:
- /usr/local/openresty/nginx/logs/error.log # 假设应用2的日志路径
fields:
log_source: secure # 输出到redis的第一个数据库
# 默认是list形式
output.redis:
hosts: ["192.168.80.107:6379"]
key: messages_secure # redis中的键,值是一个列表,俩表中存储的一行一行的上面两个应用的日志,logstash中会用到这个参数
password: foobar2000 # redis访问密码
db: 0 output.redis:
hosts: ["192.168.80.107:6379"]
key: bbb # redis中的键,值是一个列表,俩表中存储的一行一行的上面两个应用的日志,logstash中会用到这个参数
password: foobar2000 # redis访问密码
db: 1
  1. 若是如下这种写法,均只有最后一个生效,也就是只会收集secure的日志,并传输到redis的bbb这个里
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/openresty/nginx/logs/host.access.log
fields:
log_source: messages output.redis:
hosts: ["192.168.80.107:6379"]
key: aaa
password: foobar2000
db: 0 filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/openresty/nginx/logs/error.log
fields:
log_source: secure output.redis:
hosts: ["192.168.80.107:6379"]
key: bbb
password: foobar2000
db: 0

所以这个问题还有待研究,或者使用不同的inputs来源,或者使用不同的output输出

查看集群主从分配

http://192.168.80.104:9200/_cat/nodes?v

查看集群状态

http://192.168.80.104:9200/_cluster/health?pretty

小技巧,查看filebeat获取的日志结果

可以把filebeat收集的日志传输到redis中,在redis中查看,若日志正确无误,然后再开启logstash从redis中拉取数据

最新文章

  1. C#连接数据库的四种方法
  2. HDU2888 Check Corners
  3. core--主线程
  4. CMDB反思1
  5. MongoDB 日期 插入时少8小时
  6. 微软公有云事件中心(Azure Event Hubs)在开放物联网大会(OIOT)啼声初试
  7. libxml两种换行方法
  8. Cocos2d:使用 CCCamera 做滚动效果 (Four Ways of Scrolling with Cocos2D)
  9. SSH骨架Struts(1)——Struts执行过程
  10. js的搜索遍历精讲
  11. 离线安装 Cloudera Manager 5 和 CDH5.10
  12. 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码
  13. Swift中类似C++和ruby中的final机制
  14. switch-case和if-else可互换时
  15. Jupyter Notebook 介绍 安装和使用技巧
  16. 代码统计 (uustepcount)
  17. Luogu4040 AHOI/JSOI2014 宅男计划 贪心、二分、三分
  18. c# 正则表达式如何处理换行符?
  19. 比较perl+python
  20. css 中的相对定位和绝对定位

热门文章

  1. 实战build-react(二)-------引入Ant Design
  2. 详解cocos2dx 3.0的release版本在android平台的签名过程
  3. sqli-labs(21)
  4. [CSP-S模拟测试]:异或(数学)
  5. DataList是外部传入的子项数据列表
  6. mysql补0操作有什么意义?
  7. leetcode-mid-array-sorting and searching - 215 Kth Largest Element in an Array
  8. cmake使用2
  9. 十四、RF中SSHLibrary库介绍
  10. 软件-客户端管理工具-SourceTree:百科