ELK快速入门实战

初识ELK

ELK优点

          安装配置简单

          集中 收集 统一管理

          实时索引

          日志可视化展示

          集群扩展容易

ELK的三大组件

Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等。

Logstash 是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。

kibana 也是一个开源和免费的工具,Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

ELK快速入门实战_第1张图片

Logstash存储搜集日志存储到Elasticsearch中,然后通过Kibana去展示。

Logstash的语法介绍

Logstash 安装

执行yum install java安装java环境。

进入官网https://www.elastic.co/cn/downloads下载三大组件。

我下载的是logstash-2.1.1.tar.gz

tar xf logstash-2.1.1.tar.gz解压,进入logstash-2.1.1,

执行:./bin/logstash -e "input{stdin{}}output{stdout{codec=>rubydebug}}"

等待启动成功后,输入什么就会打印什么。

ELK快速入门实战_第2张图片

将命令放在配置文件

mkdir conf创建配置文件目录,创建test.conf,增加内容。

input{
	stdin{}
}
output{
	stdout{
		codec=>rubydebug{}
}
}

启动Logstash并指定配置文件:

./logstash-2.1.1/bin/logstash -f conf/test.conf 

ELK快速入门实战_第3张图片

后台运行

第一种:

nohup ./logstash-2.1.1/bin/logstash -f conf/test.conf &

查看日志:

tail -f nohup.out

第二种:

安装screen

yum install screen

直接输入screen回车,在新的窗口输入命令,等待logstash启动后,Ctrl+A+D回到原先的窗口,此时ps -ef可以看到logstash已在后台运行。

screen -ls命令查看运行的终端

ELK快速入门实战_第4张图片

screen -r 24559(端口号)进入终端

终止:screen -X -S 24559 quit

 

Logstash常用插件

input / file 插件

修改test.conf文件

input{
        file {
                #监听文件的路径
                path => ["/var/log/nginx/access.log"]
                type => "nginx"
                #监听的位置,第一行读取
                start_position => "beginning"
}
}
output{
        stdout{
                codec => rubydebug{}
}
}

指定配置文件自动logstash,./logstash-2.1.1/bin/logstash -f ./conf/test.conf

当访问这个服务器是。nginx日志中会有记录,而此时logstash也会打印出此日志。

ELK快速入门实战_第5张图片

配置文件中的start_position => "beginning"是指在监听文件的第一行开始读取,读取到哪一行记录在/root/.sincedb_*文件中,所以第一次启动时会将所有的被监听文件的信息都打印出来,而第二次启动时,将会在记录的那一行开始读取。加入需要再次从第一行读取,就删除记录文件rm -rf /root/.sincedb_d883144359d3b4f516b37dba51fab2a2 。

start_position => "end"是指读取最后一行,并实时打印出文件更新的内容。

 

multiline插件

安装插件,在/ELK/logstash-2.1.1/bin下

./plugin install logstash-codec-multiline

./plugin install logstash-filter-multiline

配置文件

input{
#	file {
#		path => ["/var/log/nginx/access.log"]
#		type => "nginx"
#		start_position => "beginning"
#}

	stdin{
		codec => multiline{
            #设置匹配的正则表达式
			pattern => "^\["
            #设置true是向前匹配,设置false向后匹配,默认是FALSE
			negate => true
            #设置未匹配的内容是向前合并还是先后合并,previous,next两个值选择
			what => "previous"
}
}
}
output{
	stdout{
		codec => rubydebug{}
}
}

ELK快速入门实战_第6张图片

这一配置的效果就是打印出最后一个“[”到前一个“[”之间的数据。

grok插件

官方提供的grok表达式

https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

log样本:

55.3.244.1 GET /index.html 15824 0.043

配置文件样本:

input{
        file {
                path => ["/ELK/2.log"]
                start_position => "beginning"
}
}
filter {
        grok {
                match => ["message" , "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"]}
#       kv {
#               source => "request"
#               field_split => "&"
#               value_split => "="
#               remove_field => ["aw"]
#}
        urldecode {
                all_fields => true
}
}
output{
        stdout{
                codec => rubydebug
}
}

执行命令:

./logstash-2.1.1/bin/logstash -f conf/grok.conf

效果:

ELK快速入门实战_第7张图片

json 插件

修改nginx日志格式,将输出日志格式修改为json。

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    log_format log_json '{"@timestamp":"$time_iso8601",'
                 '"host":"$server_addr",'
                 '"clientip":"$remote_addr",'
                 '"size":$body_bytes_sent,'
                 '"responsetime":$request_time,'
                 '"upstreamtime":"$upstream_response_time",'
                 '"upstreamhost":"$upstream_addr",'
                 '"http_host":"$host",'
                 '"url":"$uri",'
                 '"referer":"$http_referer",'
                 '"agent":"$http_user_agent",'
                 '"status":"$status"}';


   # access_log  /var/log/nginx/access.log  main;
    access_log  /var/log/nginx/access.log  log_json;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

nginx重启后,访问服务器时nginx的日志为:

修改logstash配置文件

input{
	file {
		path => ["/var/log/nginx/access.log"]
		type => "nginx"
		start_position => "end"
		codec => json
}

#	stdin{
#		codec => multiline{
#			pattern => "^\["
#			negate => true
#			what => "previous"
#}
#}
}
output{
	stdout{
		codec => rubydebug{}
}
}

Elasticsearch、Kibana安装配置详解

下载elasticsearch-2.2.1.tar.gz,解压:

tar xf elasticsearch-2.2.1.tar.gz

进入elasticsearch-2.2.1文件夹,执行./bin/elasticsearch

报错说不能用root账户运行

ELK快速入门实战_第8张图片

新建用户,并切换到该用户下

useradd elk

su - elk

切换到root给该用户赋予权限


chown elk.elk elasticsearch-2.2.1 -R

执行./bin/elasticsearch

启动成功,监听的端口是9200和9300

ELK快速入门实战_第9张图片

查看端口

netstat -anpt

ELK快速入门实战_第10张图片

说明elasticsearch正常启动。

 

下载kibana,解压

tar xf kibana-4.3.1-linux-x64.tar.gz

进入kibana,启动

./bin/kibana

ELK快速入门实战_第11张图片

浏览器访问5601端口

ELK快速入门实战_第12张图片

Elasticsearch 配置

修改conf/test.conf配置

input{
        file {
                path => ["/var/log/nginx/access.log"]
                type => "nginx"
                start_position => "end"
                codec => json
}

#filter {
#       geoip {
#               source => "remote_addr"
#               fields => ["ip","city_name","country_name","location"]
#}
#}

#       stdin{
#               codec => multiline{
#                       pattern => "^\["
#                       negate => true
#                       what => "previous"
#}        
#}       
}         
output{  
#       stdout{ 
#               codec => rubydebug{}
#}           
      
        elasticsearch {
                hosts => ["127.0.0.1:9200"] 
                index => "logstash-%{+YYYY.MM.dd}"
}   
}

在/ELK/elasticsearch-2.2.1/config的elasticsearch.yml配置中可修改开放地址:

ELK快速入门实战_第13张图片

ELK快速入门实战_第14张图片

在/ELK/kibana-4.3.1-linux-x64/config的kibana.yml修改监听的elasticsearch端口

ELK快速入门实战_第15张图片

test.conf配置中的elasticsearch的hosts

ELK快速入门实战_第16张图片

这个地址,我用的是云服务器的内网地址;如果用外网地址,elasticsearch启动报错。

三个都启动之后的效果:

ELK快速入门实战_第17张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(ELK)