搜集---》过滤---》处理
Grok:匹配需要收集的字段信息
Date:处理日期类型
Geoip:添加地理位置信息
Useragent:提取请求用户信息
logstsh input插件
stdin
输入插件:可以管道输入,也可以从终端交互输入
通用配置:
codec:类型为codec
type:类型为string自定义该事件类型,可用于后续判断
tags:类型为array,自定义事件的tag,可用于后续判断
add_field:类型为hash,为该事件添加字
input{
stdin{
codec => “plain”
tags => [“test”]
type => “std”
add_field => {“key”=>”value”}
}
}
output{
stdout{
codec => “rubydebug”
}
}
file
从文件读取数据,如常见的日志文件
配置:
path => [“/var/log/**/*.log”,”/var/log/message”] 文件位置
exclude => “*.gz” 不读取哪些文件
sincedb_path => “/var/log/message” 记录sincedb文件路径
start_position => “beginning” 或者”end” 是否从头读取文件
stat_interval => 1000 单位秒,定时检查文件是否有更新,默认
input {
file {
path => ["/home/elk/logstsh/config/nginx_logs"]
start_position => "beginning"
type => "web"
}
}
output {
stdout {
codec => "rubydebug"
}
}
Elasticsearch
input {
elasticsearch {
hosts => "192.168.14.10"
index => "atguigu"
query => '{ "query": { "match_all": {} }}'
}
}
output {
stdout {
codec => "rubydebug"
}
}
logstsh filter
Filter是logstsh功能强大的原因,它可以对数据进行丰富的处理,比如解析数据、删除字段、类型转换等
date:日期解析
grok:正则匹配解析
dissect:分割符解析
mutate:对字段作处理,比如重命名、删除、替换等
json:按照json解析字段内容到指定字段中
geoip:增加地理位置数据
ruby:利用ruby代码来动态修改logstsh Event
input {
stdin {codec => “json”}
}
filter {
date {
match => ["logdate","MM dd yyyy HH:mm:ss"]
}
}
output {
stdout {
codec => "rubydebug"
}
}
Elasticsearch 使用的是标准的 RESTful 风格的 API 和 JSON。
操作es方式 1、TransportClient (tcp) 2、RestClient。(http)3、Spring Data 4 、JestClient
TransportClient:
官网宣布We plan on deprecating the TransportClient in Elasticsearch 7.0 and removing it completely in 8.0.
(https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-api.html)
所以TransportClient 不准备了解了。
RestClient:
elasticsearch 5.0引入了一个新的客户端 RestClient ,使用HTTP API elasticsearch代替内部协议。这需要更少依赖关系。你也不需要关注那么多版本,当前客户端也可以用于elasticsearch 2.x版本。
Java REST客户端有两种风格:
Java Low Level REST Client:官方提供的低级客户端。该客户端通过http来连接Elasticsearch集群。用户在使用该客户端时需要将请求数据手动拼接成Elasticsearch所需JSON格式进行发送,收到响应时同样也需要将返回的JSON数据手动封装成对象。虽然麻烦,不过该客户端兼容所有的Elasticsearch版本。
Java High Level REST Client:官方提供的高级客户端。该客户端基于低级客户端实现,它提供了很多便捷的API来解决低级客户端需要手动转换数据格式的问题。(也就是说,使用高级客户端我们不再需要去关注如何将请求数据拼接成Elasticsearch所需JSON格式,也不需要关注如何将响应返回数据封装成对象)
Jest:
jest是一款java Rest client,它支持SSL、proxy等等,而原生的transport client是TCP连接,用户认证授权要自己想办法实现,并且封装接口控制用户的操作。
Spring Data Elasticsearch:(ElasticsearchRepository
)
Spring Data Elasticsearch更适合于使用Spring数据库的开发人员,并且不想直接与REST API接触。
从设计上来讲属于两种思路,Spring Data的思路就是将ElasticSearch当自家的数据仓库来管理,直接通过Java客户端代码操作ES;Jest的思路是将ElasticSearch当为独立的服务端,自己作为客户端用兼容性最强的RestFul格式来与之交互。
个人比较倾向于Jest方式,第一兼容性好,不需要考虑版本的问题。第二,从ElasticSearch本身的设计上来分析,9200是对外服务端口,9300是内部管理和集群通信端口,请求9200获取搜索服务更符合ES的设计初衷,不会影响集群内部的通信。
未完待续