目前日志分析系统用的越来越广泛,而且最主流的技术即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 正式成为官方用语。
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 {} }' //命令行测试,输入任何值会有输
-------------------------------------------------------------------------------
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 结合没问题 (架构应用配置一)
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 选项后台启动,如下表示安装成功
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 //查看输出如下,是否匹配
五、安装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才有图表 } |
3、kibana web端设置
引入elaticsearc_index,kibana才能对其进行展示,如下
六:搭建架构
当测试上面各个组件没问题后,我们将搭建整个架构,实现目标如下:
架构二:Logstash_agent > redis > logstash_index > elasticsearch > kibana
# 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 试试效果 .........