我们最近把 svn 代码仓库协议从 svn 改成了 http
目的是通过 apache 记录 svn 客户端的操作日志,然后通过 ELK 分析
本文主要介绍 logstash 的使用
一、测试 grok match和urldecode
先看下日志格式
[10.1.5.203][lyz][2021-12-23 20:00:11][commit r20][%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE]
末尾的那个是 "测试项目" 的URL编码,apache打印的日志里,中文仓库名称会被URL编码,所以我们待会儿 logstash 要进行解码
1、创建 logstash.conf
input {
file{
path => 'D:/Apache2.2/logs/svn*.log'
start_position => "beginning"
}
}
filter {
grok {
match => {
"message" => "\[%{GREEDYDATA:ip}\]\[%{GREEDYDATA:user}\]\[%{GREEDYDATA:createTime}\]\[%{GREEDYDATA:action}\]\[%{GREEDYDATA:repoName}\]"
}
}
date {
match => ["createTime","yyyy-MM-dd HH:mm:ss"]
target => "createTime"
}
mutate {
remove_field => ["message"]
remove_field => ["path"]
remove_field => ["@version"]
remove_field => ["host"]
}
urldecode{
all_fields => true
}
}
output {
elasticsearch {
hosts => ["10.1.5.190:9200"]
index => "svn-log"
}
}
stdin 代表从控制台输入
stdout 代表从控制台输出
我们先暂时直接用控制台测试,待会儿会存到 ES 中
注意 grok match 里需要对特殊字符,如空格,标点符号 加 斜杠\ 进行转义,里面输入的是正则表达式
可以在该地址进行测试 http://grokconstructor.appspot.com/do/match#result
2、启动logstash
因为我的 mac,在logstash 的 bin 目录下输入命令
./logstash -f ../config/logstash.conf
3、等控制台加载会儿,然后输入字符串,即我想输入的日志信息,如
[10.1.5.190][zhangsan][2021-12-23 20:15:11][commit r20][repo1]
再测试下仓库名称为中文的情况
[10.1.5.192][lisi][2021-12-23 20:16:11][commit r21][%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87]
repoName成功解码,完美
二、输出到 ES
本地启动es,在es安装目录的bin命令下输入
elasticsearch -d
目前没有设置 es 账号密码
1、修改 logstash.conf
input {
stdin {
}
}
filter {
grok {
match => {
"message" => "\[%{GREEDYDATA:ip}\]\[%{GREEDYDATA:user}\]\[%{GREEDYDATA:createTime}\]\[%{GREEDYDATA:action}\]\[%{GREEDYDATA:repoName}\]"
}
}
urldecode {
field => repoName
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "svn-log"
}
}
2、如上分别在控制台输入
[10.1.5.190][zhangsan][2021-12-23 20:15:11][commit r20][repo1]
[10.1.5.192][lisi][2021-12-23 20:16:11][commit r21][%E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87]
如何查询 es head 可视化页面
在 svn-log 索引里果然有2条数据,且有对应字段
三、指定采集文件
比如我需要指定采集 apache logs 下的所有日志文件,可以这样操作
input {
file {
path => "/Users/liuyanzhao/soft/apche22/svn-log*.log"
start_position => beginning
}
}
filter {
grok {
match => {
"message" => "\[%{GREEDYDATA:ip}\]\[%{GREEDYDATA:user}\]\[%{GREEDYDATA:createTime}\]\[%{GREEDYDATA:action}\]\[%{GREEDYDATA:repoName}\]"
}
}
urldecode {
field => repoName
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "svn-log"
}
}
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏