前言
一样平常我们需要举行日志剖析场景:直接在日志文件中 grep
、awk
就可以获得自己想要的信息。但在规模较大的场景中,此方式效率低下,面临问题包罗日志量太大若何归档、文本搜索太慢怎么办、若何多维度查询。需要集中化的日志治理,所有服务器上的日志网络汇总。常见解决思绪是确立集中式日志网络系统,将所有节点上的日志统一网络,治理,接见。ELK提供了一整套解决方案,而且都是开源软件,之间互相配合使用,完善衔接,高效的知足了许多场所的应用。
ELK
ELK
是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch
、Logstash
和Kibana
。Elasticsearch
是一个搜索和剖析引擎。Logstash
是服务器端数据处置管道,能够同时从多个泉源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana
则可以让用户在Elasticsearch
中使用图形和图表对数据举行可视化。
Elasticsearch
Elasticsearch
是一个实时的分布式搜索剖析引擎,它能让你以亘古未有的速率和规模去检索你的数据。
下载地址:https://www.elastic.co/cn/downloads/elasticsearch
设置
下面枚举一下常见的设置项
cluster.name
:集群名称,默以为elasticsearch
。node.master
:该节点是否可以作为主节点(注重这里只是有资格作为主节点,不代表该节点一定就是master),默以为true
node.name
:节点名称,若是不设置es则会自动获取path.conf
:设置文件路径,默以为es根目录的config文件夹path.data
:设置索引数据的文件路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号离隔path.logs
:设置日志文件路径,默认是es根目录下的logs文件夹path.plugins
:设置es插件路径,默认是es根目录下的plugins文件夹http.port
:es的http端口,默以为9200transport.tcp.port
:与其它节点交互的端口,默以为9300transport.tcp.compress
:设置是否压缩tcp传输时的数据,默以为false,不压缩。network.bind_host
:设置绑定地址,默以为0.0.0.0network.publish_host
:设置其他节点毗邻此节点的ip地址,若是不设置的话,则自动获取,publish_host
的地址必须为真实地址network.host
:同时设置bind_host
和publish_host
这两个参数http.enabled
:是否对外使用http协议,默以为trueindex.number_of_replicas
:设置索引副本个数,默以为1http.cors.enabled
:是否支持跨域,默以为falsehttp.cors.allow-origin
:当设置允许跨域,默以为*
测试
领会的设置文件项之后我们可以来举行简朴的设置
vim config/elasticsearch.yml
cluster.name: master
node.name: elk-1
path.data: /data/es
path.logs: /var/log/es/
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
然后启动es
bin/elasticsearch
检查服务端口是否正常监听
[qiyou@example es]$ netstat -utnl|grep -E "9200|9300"
tcp6 0 0 127.0.0.1:9200 :::* LISTEN
tcp6 0 0 ::1:9200 :::* LISTEN
tcp6 0 0 127.0.0.1:9300 :::* LISTEN
tcp6 0 0 ::1:9300 :::* LISTEN
检查es是否正常事情,可以看到是正常事情的
[qiyou@example es]$ curl -i -XGET 'localhost:9200/_count?pretty'
HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 114
{
"count" : 0,
"_shards" : {
"total" : 0,
"successful" : 0,
"skipped" : 0,
"failed" : 0
}
}
上面用下令检索数据来是不是感受贫苦,我们可以安装es插件elasticsearch-head
,项目链接:https://github.com/mobz/elasticsearch-head
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
检查是否正常启动
netstat -untl|grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN
然后接见http://localhost:9100/
即可
,欢迎进入欧博Allbet官网(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。
Logstash
Logstash
是一个实时的管道式开源日志网络引擎。Logstash
可以动态的将不同泉源的数据举行归一而且将格式化的数据存储到你选择的位置。对你的所有做数据洗濯和普通化处置,以便做数据剖析和可视化。Logstash
通过输入、过滤和输出插件Logstash
可以对任何类型的事宜厚实和转换,通过内陆编码器还可以进一步简化此历程。
logstash
下载地址:https://www.elastic.co/cn/downloads/logstash
logstash
的基本目录结构如下及其寄义:
Type | Description | Default Location | Setting |
---|---|---|---|
home | logstash安装的目录 | {extract.path} |
|
bin | logstash的二进制剧本以及插件 | {extract.path}/bin |
|
settings | 设置文件, 包罗logstash.yml 和jvm.options |
{extract.path}/config |
path.settings |
logs | 日志文件 | {extract.path}/logs |
path.logs |
plugins | 插件存放的目录,每个插件都包罗在一个子目录中 | {extract.path}/plugins |
path.plugins |
data | logstash及其插件为任何持久性需求所使用的数据文件 | {extract.path}/data |
path.data |
一个Logstash
管道有两个必须的组件,input
和output
,除此之外另有一个可选的组件filter
。input
插件将数据从源读入,filter
插件根据你的界说处置数据,最后通过output
插件写入到目的地。
Logstash
支持的input
插件:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
Logstash
支持的output
插件:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
注:有的插件默认是没有安装的,可以使用logstash-plugin list
列出所有已经安装的插件
设置
input插件
可以指定logstash的事宜源
下面枚举几种常见的事宜源
stdin
:尺度输入
input {
stdin { }
}
file
:从文件中读取
file {
path => "/var/log/secure"
type => "logstash_log" , 界说类型,一样平常用于过滤器中
start_position => "beginning" , 示意从文件开头读取,默以为end
}
syslog
:从syslog传输过来的事宜中读取
syslog{
port =>"514" , 监听的端口,syslog设置文件中设置:*.* @ip:514 即可
type => "syslog"
}
beats
:从Elastic beats
吸收事宜
beats {
port => 5044 , 监听的端口
}
然后在beat举行如下设置即可
output.logstash:
hosts: ["localhost:5044"]
Redis
:从redis中获取事宜
redis {
host => "127.0.0.1"
port => "6379"
password => "passwd"
db => "1"
data_type => "list"
key => "redis_key"
batch_count => 1
}
output插件
指定logstash事宜的吸收源
下面枚举几种常见的接受源
stdout
:尺度输出
output{
stdout{
codec => "rubydebug"
}
}
file
:将事宜保存到文件中
file {
path => "/var/log/logstash/%{host}/{application}
codec => line { format => "%{message}"} }
}
kafka
:将事宜发送到kafka
kafka{
bootstrap_servers => "localhost:9092"
topic_id => "logstash_log"
}
elasticseach
:将事宜发送到es中
elasticsearch {
hosts => "localhost:9200"
index => "logstash-%{ YYYY.MM.dd}"
}
redis
:将事宜发送到redis
redis {
data_type => "list"
host => "127.0.0.1"
port => "6379"
db => "1"
password => "passwd"
key => "redis_key"
}
filter过滤器插件
对事宜举行中心处置,
filter
过滤器这里只枚举gork
gork
可以将非结构化日志数据剖析为结构化和可查询的数据,gork
的基本语法为:%{SYNTAX:SEMANTIC}
SYNTAX
:SYNTAX
是与文本匹配的模式的名称,如123
可以匹配的是NUMBER
,127.0.0.1
可以匹配的是IP
注:NUMBER
和IP
都是gork
默认内置的字段,不需要我们分外编写正则表达式,gork
默认内置120个预界说匹配字段:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns