(二)ELK学习之LogStash
来源:互联网 发布:大公司如何混淆js代码 编辑:程序博客网 时间:2024/05/18 04:00
什么是 Logstash
Logstash 是一个开源工具,它可以对你的日志进行收集、分析、并将其存储以后使用
怎么用 Logstash
安装配置
在安装之前要有 Java1.8 环境,因此先要配置 Java 环境,这点不懂可自行百度。
首先安装 Logstash,[Logstash下载地址][1]。因为我是在 Windows 下安装,因此下载的是 ZIP 版本 。下载完成后,直接解压即可。
解压完毕后,进入 bin 目录,首先要写响应的配置文件,先新建一个配置文件,pipeline.conf 配置文件主要包括三个部分,分别是 input、filter、output 分别定义了输入来源,过滤规则,输出到什么地方。一个简单地配置文件如下,从控制台输入,在输出到控制台,没有过滤规则。
input { stdin { } } output { stdout {} }
然后执行命令 logstash agent -f pipeline.conf ,结果如下:
PS C:\ELK\logstash-2.1.0\bin> .\logstash agent -f .\pipeline.confio/console not supported; tty will not be manipulatedSettings: Default filter workers: 2Logstash startup completed
表示运行成功,在命令行输入 hello world ,显示如下:
PS C:\ELK\logstash-2.1.0\bin> .\logstash agent -f .\pipeline.confio/console not supported; tty will not be manipulatedSettings: Default filter workers: 2Logstash startup completedhello world2015-12-03T13:30:39.180Z liuyb hello world
配置语法
Logstash 设计了自己的 DSL ———— 包括有区域、注释、数据类型(布尔值、字符串、数值、数组、哈希)、条件判断、字段引用。
- 区段(section)
Logstash 用 {} 来定义区域,区域内可以包括插件区域定义,你可以在一个区域内定义多个插件,插件区域内则可以定义键值对设置。如下所示。
input{ stdin{} syslog{}}
数据类型
bool
debug=>true
String
host=>”hostname”
number
port=>514
array
options=>{key1=>val1,key2=>val2}
字段引用
字段是 Logstash::Event 对象的属性。我们之前提过事件就像一个哈希一样,所以你可以想象字段就想一个键值对。
如果你想在 Logstash 配置中使用字段的值,只需要把字段的名字写在中括号 [] 里就行了,这就叫做字段引用。
对于嵌套字段(也就是多维哈希表,或者叫哈希的哈希),每层的字段名都写在 [] 里就可以了。条件判断
表达式支持以下这些操作符- ==(等于), !=(不等于), <(小于), >(大于), <=(小于等于), >=(大于等于)
- =~(匹配正则), !~(不匹配正则)
- in(包含), not in(不包含)
- and(与), or(或), nand(非与), xor(非或)
- ()(复合表达式), !()(对复合表达式结果取反)
插件介绍
在 “Hello World” 示例中,我么已经见到并介绍了 Logstash 的运行流程和配置的基础语法。从这里开始我们就要逐一介绍 Logstash 流程中比较常用的一些插件,并在介绍中针对其主要适用的场景,推荐的配置,做一些说明。
配置示例中代码并不能贴完整,请记住一个原则:Logstash 配置一定要有一个 input 和一个 output。
input
collectd
collectd 是一个守护进程,用来收集系统性能和提供各种存储方式来存储不同值的机制,他会在系统运行和存储信息时周期性的统计系统相关信息。利用这些信息有助于查找当前系统性能瓶颈(如作为性能分析 performance analysis)和预测系统未来的 load(如能力部署 capacity planning)等。
collectd 的配置
以下配置可以实现对服务器基本的 CPU、内存、网卡流量、磁盘IO以及磁盘空间占用情况监控
Hostname "host.example.com"LoadPlugin interfaceLoadPlugin cpuLoadPlugin memoryLoadPlugin networkLoadPlugin dfLoadPlugin disk<Plugin interface> Interface "eth0" IgnoreSelected false</Plugin><Plugin network> <Server "10.0.0.1" "25826"> ## logstash 的 IP 地址和 collectd 的数据接收端口号 </Server></Plugin>
Logstash配置
以下配置实现通过 logstash 监听 25826 端口,接受从 collectd 发送过来的各项检测数据:
input { collectd { port => 25826 ## 端口号与发送端对应 type => collectd}
推荐配置
udp { port => 25826 buffer_size => 1452 workers => 3 # Default is 2 queue_size => 30000 # Default is 2000 codec => collectd { } type => "collectd"}
运行结果
{ "_index": "logstash-2014.12.11", "_type": "collectd", "_id": "dS6vVz4aRtK5xS86kwjZnw", "_score": null, "_source": { "host": "host.example.com", "@timestamp": "2014-12-11T06:28:52.118Z", "plugin": "interface", "plugin_instance": "eth0", "collectd_type": "if_packets", "rx": 19147144, "tx": 3608629, "@version": "1", "type": "collectd", "tags": [ "_grokparsefailure" ] }, "sort": [ 1418279332118 ]}
file
Logstash 使用一个名叫 FileWatch 的 Ruby Gem 库来监听文件变化。这个库支持 glob 展开文件路径,而且会记录一个叫 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位置。所以不要担心 logstash 会漏过你的数据。
实例配置
input { file { path => ["/var/log/*.log", "/var/log/message"] type => "system" start_position => "beginning" }}
解释
discover_interval
logstash 每隔多久去检查一次被监听的 path 下是否有新文件,默认值是15秒
exclude
不想被监听的文件可以排除出去,这里跟 path 一样支持 glob 展开
close_older
一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是 3600 秒,即一个小时
ignore_older
在每次检测文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件,默认是 86400 秒,即一天
since_path
如果你不想使用默认的$HOME/.sincedb
(Windows平台上在C:\Windows\System32\config\systemprofile.sincedb),可以通过这个配置定义 sincedb 文件到其他位置
sincedb_write_interval
logstash 每隔多久写一次 sincedb 文件,默认是 15 秒
stat_interval
logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。
logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成 “beginning”,logstash 进程就从头开始读取,有点类似 cat,但是读到最后一行不会终止,而是继续变成 tail -F。
stdin
配置示例
input { stdin { add_field => {"key" => "value"} codec => "plain" tags => ["add"] type => "std" }}
运行结果
用上面的 stdin 设置重新运行一次最开始的 hello world 示例。得到下面的输出:
{ "message" => "hello world", "@version" => "1", "@timestamp" => "2014-08-08T06:48:47.789Z", "type" => "std", "tags" => [ [0] "add" ], "key" => "value", "host" => "raochenlindeMacBook-Air.local"}
解释
type 和 tags 是 logstash 事件中两个特殊字段,通常来说我们会在输入区段中通过 type 来标记事件类型。而 tags 则是在数据处理过程中,有具体的插件添加或者删除的。
常见用法如下:
input { stdin { type => "web" }}filter { if [type] == "web" { grok { match => ["message", %{COMBINEDAPACHELOG}] } }}output { if "_grokparsefailure" in [tags] { nagios_nsca { nagios_status => "1" } } else { elasticsearch { } }}
syslog
tcp
读取网络数据,未来你可能会使用 Redis 服务器或者其他的消息队列系统来作为 logstash broker 的角色。不过 Logstash 其实也有自己的 TCP/UDP 插件,在临时任务的时候,也算能用,尤其是在测试环境中。
配置示例
input { tcp { port => 8888 mode => "server" ssl_enable => false }}
常见场景
目前开来,LogStash::Inputs::TCP 最常见的用法就是配合 nc 命令导入旧数据。再启动 Logstash 进程后,在另一个终端运行如下命令即可导入数据。
nc 127.0.0.1 8888 < olddata
codec(编码插件)
采用 Json 编码
示例配置
input { file { path => "/var/log/nginx/access.log_json"" codec => "json" }}
合并多行数据(multiline)
有些时候,应用程序调试日志会包含非常丰富的内容,为一个时间打印出很多行内容,这种日志通常都很难通过命令行解析方式分析。
而 logstash 正为此准备好了 codec/multiline 插件
示例配置
input { stdin { codec => multiline { pattern => "^\[" negate => true what => "previous" } }}
运行结果
运行 logstash 进程,然后在等待输入的终端中输入如下几行数据:
[Aug/08/08 14:54:03] hello world[Aug/08/09 14:54:04] hello logstash hello best practice hello raochenlin[Aug/08/10 14:54:05] the end
你会发现 logstash 输出下面的这样的返回:
{ "@timestamp" => "2014-08-09T13:32:24.359Z", "message" => "[Aug/08/09 14:54:04] hello logstash\n\n hello best practice\n\n hello raochenlin\n", "@version" => "1", "tags" => [ [0] "multiline" ], "host" => "raochenlindeMacBook-Air.local"}
解释
其实这个插件的原理很简单,就是把当前行的数据添加到前面一行后面,指导新的当前行匹配到 ^[ 正则为止。
netflow
filter(过滤器插件)
时间处理(Date)
filter/date 插件
grok
geoip
json
kv
metrics
ruby
split
elapsed
output
持续更新中。。。
- (二)ELK学习之LogStash
- ELK(二)安装logstash
- ELK logstash 学习一
- ELK之Logstash
- ELK 之 Logstash
- ELK 之 Logstash
- ELK 之二:ElasticSearch 和Logstash高级使用
- ELK(一)Logstash
- ELK-Logstash(1)
- ELK之logstash长久运行
- 最近ELK(elasticsearch+logstash+kibana)学习小结
- 搭建ELK(ElasticSearch+Logstash+Kibana)日志分析系统(二) Logstash简介及常见配置语法
- Logstash学习8_分布式日志收集之Logstash 笔记(二)
- ELK -Logstash
- elk之logstash安装与配置
- (零)ELK学习之ELK安装配置
- ELK (ElasticSearch + Logstash + Kibaba + Marvel)系统的搭建学习与简单使用
- ELK日志收集系统调研(二)---LogStash Shipper&Indexer
- 获取高德地图省市区县列表
- Android开发---Viewpager+Fragment使用指南
- 【C++】STL常用容器总结之二:顺序容器
- leetcodeOJ 168
- CentOS更改yum源与更新系统
- (二)ELK学习之LogStash
- 重新出发,脚踏实地
- HTTP 长连接和短连接
- ELK 问题记录
- 笔记:C++学习之旅---引用
- CSU 1588 合并果子
- java-反射
- HDU 3388 与m,n 互质的第k个整数
- 杂记 《吐槽星人》