目前日志分析系统用的越来越广泛,而且最主流的技术即ELK,下面和大家分享一下:

---------------------------------------------------------------------------------------

一:简 介 

Elastic Stack 是 原 ELK Stack 在 5.0 版本加入 Beats 套件后的新称呼,近两年飞速崛起,成为开源界机器数据分析和日志处理第一选择。

组成:

kibana:开源工具,为 EL 提供友好的 Web 界面,汇总、分析和搜索重要数据日志;

Logstash:开源工具,它可以对你的日志进行收集、分析,并将其存储供以后使用;

Elasticsearch:开源搜索引擎,分布式、零配置、自动发现、索引机制好、restful接口、多数据源等。

特点如下:

处理方式灵活:Elastic.. 是实时全文索引,不需要像 storm 那样预先编程才能使用;

集群线性扩展:不管是 Elasticsearch 集群还是 Logstash 集群都是可以线性扩展的;

前端操作炫丽:Kibana 界面上,只需要点击鼠标,就可以完成搜索、聚合功能,生成炫丽的仪表板;

检索性能高效:每次查询都是实时计算,但优秀的设计和实现基本可以达到全天数据查询的秒级响应;

配置简易上手:Elastic.. 采用 JSON 接口,Logstash 是 Ruby DSL 设计,都是目前最通用的配置语法;

文档:https://kibana.logstash.es/content/

官网:https://www.elastic.co/downloads/logstash

架构:

目前大家实用接触最多的有四种架构,我们今天使用的是第二种,简单了解一下:

1、logstash > elasticsearce > kibana 

2、logstash_agent > kafka/redis > logstash_index > elasticsearch > kibana

3、logstash_forword > logstash > elasticsearch > kibana

4、filebeat > logstash > elasticsearch > kibana

1、简单易上手、elastic数据易丢失、logstash消耗资源大

2、适用于大集群、引入消息队列保障了数据、但logstash elastic 负载较重

3、forword耗资源极低、与logstash采用ssl加密传输安全、但加密也产生了一定限制性

4、filebeat耗资源极低、并且扩展灵活性高、目前很多朋友开始将 elk 转移到这方向来了

详情见:http://blog.csdn.net/lively1982/article/details/50678657 


二:安装  logstash-5.3 (yum方式安装)

Logstash 诞生于2009年8月2日,作者乔丹西塞(JordanSissel),发布过很棒打包工具fpm,2013年 Logstash 被Elasticsearch 公司收购,促使 ELK Stack 正式成为官方用语。

ELK - 实用日志分析系统_第1张图片

1、安装java环境

java -version  // java9不支持,确保输出是java 1.8系列

# alternatives --config java  //如果服务器存在多个java,可通过此命令更改优先顺序

2、配置yum源安装 logstash

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch  //下载签名秘钥

vim /etc/yum.repos.d/logstash.repo

[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum install logstash   //默认安装路径/usr/share/logstash

cd /usr/share/logstash

bin/logstash -e 'input { stdin { } } output { stdout {} }'   //命令行测试,输入任何值会有输

ELK - 实用日志分析系统_第2张图片

-------------------------------------------------------------------------------

error:Could not find logstash.yml which ....located  $LS_HOME/config or /etc/logstash

解决:cd /usr/share/logstash  &&  ln -svf /etc/logstash  config

error:启动特别慢(其实java写的tomcat也有这问题)

解决:yum install haveged  && systemctl start haveged && systemctl enable haveged

原因:在于jruby启动慢,新版 jruby 启动的时候用PRNG算法产生随机数,会快;但是老版的启动时 jdk 会去 /dev/random 初始化随机数熵,random 发生跟不上生成速度,会被阻塞,直到随机数池有了足够的熵,查看池子 /proc/sys/kernel/random/entropy_avail。安装后随机数都在1000以上

---------------------------------------------------------------------------------

3、测试

在生产环境,我们当然不能命令行直接启动,可以放到screen 或者nohup &启动,但最常用的方法还是daemon,服务去找config下面的配置文件将所有.conf 整合成一个大conf启动,以格式收集日志;

启动:systemctl start logstash   //启动服务,会整合conf下所有的配置文件启动

测试:vim /etc/logstash/conf.d/messlog.conf

input {
    file {
        path => ["/var/log/messages"]   #监控的文件
        type => ["message"]
       #start_position => ["beginning"]  #从最开始输出
    }
}
output {
    stdout { codec => rubydebug }  #屏幕输出信息
    file {
        path => "/usr/share/logstash/recordlog/%{+dd}/%{host}.log"
        codec => "json"   #json格式,信息输入到文件
    }
}

检查:logstash -t -f messlog.conf   //首先要将logstash加入PATH

启动:logstash -f messlog.conf   //命令行指定配置文件启动

测试:logger -i teng test    //此命令可像messages log写入内容测试

4、安装插件 plugins

logstash 1.5.0 版本开始,logstash 将所有的插件都独立拆分成 gem 包,这样就可以单独更新某个插件而不需要等待 logstash整个更新。为此配置了单独的命令 bin/logstash-plugin --help

查看插件:bin/logstash-plugin list   //就位于 vendor/bundle/jruby/1.9/gems/ 下

安装插件:bin/logstash-plugin install logstash-output-xxxx  //可替换成本地路径装gem包

更新插件:bin/logstash-plugin update logstash-input-xxxx

成功后,会在 Gemfile 最后和 Gemfile.jruby-1.9.lock 开头 有新内容

安装时卡住:http://tchuairen.blog.51cto.com/3848118/1871556


三:redis 安装 

1、参考:http://beibing.blog.51cto.com/10693373/1875149

2、确认 logstash 与 redis 结合没问题 (架构应用配置一)

ELK - 实用日志分析系统_第3张图片

redis-cli -p ** -a ***  > select 2 > lrange logstash:red 0 -1  //会查看到记录的日志


四:安装 Elasticsearch-5.3 (tar 包方式安装)

1、安装测试

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz

tar zxvf elasticsearch-5.3.0.tar.gz

cd elasticsearch-5.3.0   //tar 包是已编译过的,可直接使用,这种方法比yum安装更合适

bin/elasticsearch

-------------------------------------------------------------------------------

error:java.lang.RuntimeException: can not run elasticsearch as root

groupadd elsearch  && useradd elsearch -g elsearch -p elsearchpass

cd ..  &&  chown -R elsearch:elsearch elasticsearch-5.3.0  && su - elsearch

cd elasticsearch-5.3.0   &&  bin/elasticsearch   //新建其他用户启动就好

error:启动后只监听了本地的127.0.0.1,需要指定ip启动,外网才能访问这个IP

sed "s/network.host.*/network.host: 0.0.0.0/g" config/elasticsearch.yml

error:max virtual mem.... vm.max_map_count [65530] is too low.. to least [262144]

sysctl -w vm.max_map_count=262144

error:max file descriptors [65535] for elasticsea....ss is too low.. to least [65536]

vim /etc/security/limits.conf   //底部添加

elsearch soft nofile 65536

elsearch hard nofile 65536

-------------------------------------------------------------------------------

bin/elasticsearch   //启动查看,当然可以用 -d 选项后台启动,如下表示安装成功

ELK - 实用日志分析系统_第4张图片

2、elastic 从 logstash 取数据

vim /etc/logstash/conf.d/messlog.conf   //继续在logstash配置文件中添加

input {
    file {
        path => ["/var/log/messages"]
        type => ["message"]
       #start_position => ["beginning"]
    }
}
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "127.0.0.1:9200"
    }
}

logstash -f messlog.conf  //开始收集日志,检测与elasticsearch链接是否正常

curl http://localhost:9200/_search?pretty  //查看输出如下,是否匹配

ELK - 实用日志分析系统_第5张图片


五、安装kibana (rpm方式安装)

1、安装启动

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.3.0-x86_64.rpm

rpm -ivh kibana-5.3.0-x86_64.rpm   //默认安装路径与yum类似,在/usr/share/kibana

vim /etc/kibana/kibana.yml

server.host: "xxxxxxxx"    //指定被访问IP

elasticsearch.url: "http://xxxxx:9200"   //指定展示 elasttic 的数据地址

................

/usr/share/kibana/bin/kibana   // 启动测试,web端访问

2、编辑 logstash 收集格式

vim /etc/logstash/conf.d/kibana.conf  (测试配置)

input {
    file {
        path => ["/var/log/messages"]
        type => ["message"]
       #start_position => ["beginning"]
    }
}
filter {
    grok {
        match => { "message" => "%{SYSLOGBASE} %{GREEDYDATA:sys_message}" }#带=>要用{}
        overwrite => [ "message" ]   #将输出格式更改美观,见下面对比
    }
}
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "127.0.0.1:9200"
        index => "messelog-%{+YYYY.MM.dd}"  #kibana需要识别index才有图表
    }

ELK - 实用日志分析系统_第6张图片

3、kibana web端设置

引入elaticsearc_index,kibana才能对其进行展示,如下

ELK - 实用日志分析系统_第7张图片

ELK - 实用日志分析系统_第8张图片


六:搭建架构 

当测试上面各个组件没问题后,我们将搭建整个架构,实现目标如下:

架构二:Logstash_agent > redis > logstash_index > elasticsearch > kibana

ELK - 实用日志分析系统_第9张图片

# logstash_agent 处配置

input {

    file {
        path => ["/var/log/messages"]
        type => ["message"]
       #start_position => ["beginning"]
    }
}  
#filter {
#  过滤内容自定义  
#}    
output {
    redis {
     host => "xxxxxx"  #redis服务器
     port => "8888"
     db => "2"
     password => "zhimakaimen"
     data_type => "list"
     key => "message_log" #key的名字
    }
}

# logstash_index 服务器配置

input {

    redis {
        host => "127.0.0.1"
        port => "8888"
        db => "2"
        password => "zhimakaimen"
        data_type => "list"
        key => "message_log
    }
}
#filter {
#  过滤内容自定义  
#}      
output {
    elasticsearch {

        hosts => "xxxxx:9200" #elastic服务器

       index => "messelog-%{+YYYY.MM.dd}"

    } 
    #stdout { codec => rubydebug }
}

systemctl start logstash   //logstash 服务启动收集日志

redis-server redis/redis.conf  //启动redis服务

su - elsearch && elasticsearch -d  //后台启动 elastic 服务

vim /etc/kibana/kibana.yml   // kibana服务器配置 elasticsearch.url 路径

测试查看 kibana:

logger testmsg   //利用 logger 命令将 testmsg 带入message log,刷新kibana查看


------------------------------------------------------------------------------------

今天就到这,下次引入 filebeat 试试效果 .........