作者:哲亚Zoe | 来源:互联网 | 2023-05-19 09:18
ELK中,主要关心logstash的配置,es只是作为存储容器。logstash2、rubydebug格式输出.binlogstash-einput{stdin{}}output
ELK中,主要关心logstash的配置,es只是作为存储容器。
logstash
2、rubydebug格式输出
./bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
3、配置文件 输出到elasticsearch
配置项
input、filter、output
命令
[elk@linux2 elasticsearch-2.3.5]$ ./bin/logstash agent -f my.conf
① my.conf 内容
input {
file{
path => "/export/servers/tomcat7/logs/ip.txt"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => "192.168.1.204:9200"
}
stdout{codec=>rubydebug}
}
#测试时,建议一直保留标准输出,这样可以直观看到变化
读取位置
start_position => "beginning"/"end" 每次从文件什么位置读取。默认为end。
beginning时,会把上次读取位置存在 /root/.sincedb_dbd93513aa1097729e1c1c9ac4b87310 这个文件中。要想每次从头读取,就要删除。
后台启动
nohup ./bin/logstash agent -f my.conf &
启动日志存在同级目录nohup.out这个文件里
实践一 elk互通
logstash的配置如①
es配置
path.data: /export/servers/elk/elasticsearch-2.3.5/data
path.logs: /export/servers/elk/elasticsearch-2.3.5/logs
network.host: 192.168.1.204
http.port: 9200
kibana配置
server.port: 5601
server.host: "192.168.1.204"
elasticsearch.url: http://192.168.1.204:9200
因为在logstash中配置了输出到es,所以要先启动es。
ip.txt内容
202.99.198.174 - - [25/Aug/2016:14:22:26 +0800] "GET / HTTP/1.1" 200 11217
202.99.198.174 - - [25/Aug/2016:14:22:27 +0800] "GET /tomcat.css HTTP/1.1" 200 5576
202.99.198.174 - - [25/Aug/2016:14:22:27 +0800] "GET /tomcat.png HTTP/1.1" 200 5103
es启动图
上部分信息是启动信息,下面是收到日志信息
LS图
同时设置了标准输出,所以窗口也会实时显示日志
kibana
实践二 自定义字段
准备
1、删除/root/.sincedb_xxx 文件
logstash的配置
grok过滤,指定一些字段
作用:为kibana的图表展示准备字段
建议看官网示例:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html
input {
file{
path => "/export/servers/tomcat7/logs/ip1.txt"
start_position => "beginning"
}
}
filter{
grok {
match=>{ "message"=>"%{IP:client} (%{USERNAME:ident}|-) (%{USERNAME:auth}|-) \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} (HTTP/%{NUMBER:http_version}|-)\" %{NUMBER:response} %{NUMBER:bytes}" }
}
}
output {
elasticsearch {
hosts => "192.168.1.204:9200"
}
stdout{codec=>rubydebug}
}
grok的正则不匹配,就不会出现自定义的字段。kibana的各种图表就没法做了。
正则工具
官方:http://grokdebug.herokuapp.com/(不好访问)
工具:http://tool.lu/regex/
实践三 制作图表
改filter,其他配置同二。
filter{
grok {
match=>{ "message"=>"%{IP:client} (%{USERNAME:ident}|-) (%{USERNAME:auth}|-) \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} (HTTP/%{NUMBER:http_version}|-)\" %{NUMBER:response} %{NUMBER:bytes}" }
}
geoip {
source => "client"
}
}
运行elk,因为加了geoip,kibana首页左边会多很多字段。
在图表中生成地理位置信息图
具体操作,参考:
简要:http://my.oschina.net/itblog/blog/547250#OSC_h4_8
丰富:http://www.cnblogs.com/yincheng/p/logstash.html?utm_source=tuicool&utm_medium=referral
如果是自定义的index,可能无法制作tile map,参考:Kibana的图形化——Tile Map
实践四 tomcat/logs/project.log
以时间分割日志
2016-08-25 18:03:25
[INFO]-[com.asin.module.industry.member.web.RecommendController.initRecommender()]: 推荐人信息==null
2016-08-25 18:03:25
[ERROR]-[com.asin.module.marketing.bidsale.support.AUpBidSale.update()]: 商家录入数据异常!!!
logstash配置
input {
stdin{
codec => multiline {
pattern => "%{DATE} %{TIME}"
negate => true
what => "previous"
}
}
}
对于日志文件,logstash不是认行,多行可能被放在一个msg里面,叫做一个事件,所以我猜这就是设置codec作用。
实践五 只收集ERROR
input {
file {
path => "/export/servers/tomcat7/logs/catalina.out"
start_position => "beginning"
codec => multiline {
pattern => "^20"
negate => true
what => "previous"
charset => "GBK" #若需要,指定编码
}
}
}
filter {
grok {
patterns_dir => "/export/servers/elk/logstash-2.3.4/patterns/java"
match => { "message" => "%{LOGTIME:errtime}\n\[%{LOGLEVEL:level}\]-%{JAVALOGMESSAGE:logmessage}"}
}
if [level] != "ERROR" {
drop {}
}
}
自定义正则:
LOGTIME 20%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})
后台运行
elasticsearch: ./bin/elasticsearch –d
logstash: nohup ./bin/logstash agent –f my.conf &
kibana: nohup ./bin/kibana & (退出ssh会话时,不要直接关闭,要输入 exit 命令)