Logstash基本使用,采集svn日志到ES

avatar 2021年12月23日20:50:24 0 107 views

我们最近把 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"
    }
}

 

 

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
可以匿名评论或者登录后台评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0