关于ELK
ELK指的是Elastic公司下面Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。
Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。
ELK的关系
- Logstash可以将数据收集起来统一刷入Elasticsearch中
- 数据在Elasticsearch中进行分析然后通过kibana进行展示
Logstash:从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到 ES。
Elasticsearch:对大容量的数据进行接近实时的存储、搜索和分析操作。
Kibana:数据分析和可视化平台。与 Elasticsearch 配合使用,对数据进行搜索、分析和以统计图表的方式展示。
ELK的应用
- 异常分析
通过将应用的日志内容通过Logstash输入到Elasticsearch中来实现对程序异常的分析排查
- 业务分析
将消息的通讯结果通过Logstash输入到Elasticsearch中来实现对业务效果的整理
- 系统分析
将处理内容的延迟作为数据输入到Elasticsearch中来实现对应用性能的调优
Logstash
Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。
Logstash的基本概念
根据官方文档Logstash对数据的处理主要流程是
- 首先数据传入logstash,在其内部对数据进行过滤和处理
- logstash将处理过的数据传递给Elasticsearch
- Elasticsearch对数据进行存储、创建索引等内容
- kibana对数据提供可视化的支持
Logstash的核心
Logstash核心分三部分:数据输入、数据处理、数据输出
Logstash这三个部分会在其配置文件中体现出来,这里只介绍支持的功能,具体配置的内容会在后面两篇博客中介绍
其数据输入、处理、输出主要在配置中间中下面部分进行配置
input {}
filter {}
output {}
一个简单的示例
input {
file {
path => "/usr/local/log/exception/*"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok {
match => {"@timestamp" => "%{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day}" }
add_field => { "current_version" => "%{year}%{month}%{day}"}
}
}
output {
elasticsearch {
hosts => "http://47.99.100.0:9200"
index => "exception_demo"
user => exception_user
password => exception
}
stdout {}
}
数据输入
input配置定义了数据的来源。其主要支持下面方式
- file
监控文件内容输出
- stdin
监控控制台输入
- syslogs
从syslogs读取数据
- beats
从Elastic beats接收数据
- kafka
从kafka topic中读取数据
数据处理
filter plugin 过滤器插件,主要是对数据进行处理。其支持下面几种处理策略
- grok
解析文本并构造 。把非结构化日志数据通过正则解析成结构化和可查询化
- date
日期解析 解析字段中的日期,然后转存到@timestamp
- mutate
对字段做处理 重命名、删除、替换和修改字段。
- covert:类型转换。类型包括:integer,float,integer_eu,float_eu,string和boolean
- split:使用分隔符把字符串分割成数组
- merge:合并字段 。数组和字符串 ,字符串和字符串
- rename:对字段重命名
- remove_field:移除字段
- join:用分隔符连接数组,如果不是数组则不做处理
- gsub:用正则或者字符串替换字段值。仅对字符串有效
- update:更新字段。如果字段不存在,则不做处理
- replace:更新字段。如果字段不存在,则创建
- geoip
根据来自Maxmind GeoLite2数据库的数据添加有关IP地址的地理位置的信息
- ruby
ruby插件可以执行任意Ruby代码
- urldecode
用于解码被编码的字段,可以解决URL中 中文乱码的问题
- kv
通过指定分隔符将字符串分割成key/value
- useragent
添加有关用户代理(如系列,操作系统,版本和设备)的信息
数据输出
output配置定义了数据输出目标
- stdout
将数据输出到屏幕上
- file
将数据写入文件
- kafka
数据发送到kafka
- elasticseach
数据存储到elasticseach中
Logstash配置支持的运算符
作用 | 符号 |
---|---|
等于 | == |
不等于 | != |
小于 | < |
大于 | > |
小于等于 | <= |
大于等于 | >= |
匹配正则 | =~ |
不匹配正则 | !~ |
包含 | in |
不包含 | not in |
与 | and |
或 | or |
非与 | nand |
非或 | xor |
复合表达式 | () |
取反符合 | !() |
个人水平有限,上面的内容可能存在没有描述清楚或者错误的地方,假如开发同学发现了,请及时告知,我会第一时间修改相关内容。假如我的这篇内容对你有任何帮助的话,麻烦给我点一个赞。你的点赞就是我前进的动力。