设为首页 收藏本站
查看: 1895|回复: 2

[经验分享] 企业级日志收集系统——ELKstack

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-6-29 09:43:12 | 显示全部楼层 |阅读模式
ELKstack简介:   ELKstack是Elasticsearch、Logstash、Kibana三个开源软件的组合而成,形成一款强大的实时日志收集展示系统。

   各组件作用如下:
   Logstash:日志收集工具,可以从本地磁盘,网络服务(自己监听端口,接受用户日志),消息队列中收集各种各样的日志,然后进行过滤分析,并将日志输出到Elasticsearch中。
   Elasticsearch:日志分布式存储/搜索工具,原生支持集群功能,可以将指定时间的日志生成一个索引,加快日志查询和访问。

   Kibana:可视化日志Web展示工具,对Elasticsearch中存储的日志进行展示,还可以生成炫丽的仪表盘。
使用ELKstack对运维工作的好处:  1、应用程序的日志大部分都是输出在服务器的日志文件中,这些日志大多数都是开发人员来看,然后开发却没有登陆服务器的权限,如果开发人员需要查看日志就需要到服务器来拿日志,然后交给开发;试想下,一个公司有10个开发,一个开发每天找运维拿一次日志,对运维人员来说就是一个不小的工作量,这样大大影响了运维的工作效率,部署ELKstack之后,开发任意就可以直接登陆到Kibana中进行日志的查看,就不需要通过运维查看日志,这样就减轻了运维的工作。

  2、日志种类多,且分散在不同的位置难以查找:如LAMP/LNMP网站出现访问故障,这个时候可能就需要通过查询日志来进行分析故障原因,如果需要查看apache的错误日志,就需要登陆到Apache服务器查看,如果查看数据库错误日志就需要登陆到数据库查询,试想一下,如果是一个集群环境几十台主机呢?这时如果部署了ELKstack就可以登陆到Kibana页面进行查看日志,查看不同类型的日志只需要电动鼠标切换一下索引即可。
ELKstack实验架构图: wKiom1dyIIDycO6nAAAuHsm22zY193.jpg
redis消息队列作用说明:

    1、防止Logstash和ES无法正常通信,从而丢失日志。

    2、防止日志量过大导致ES无法承受大量写操作从而丢失日志。

    3、应用程序(php,java)在输出日志时,可以直接输出到消息队列,从而完成日志收集。

补充:如果redis使用的消息队列出现扩展瓶颈,可以使用更加强大的kafka,flume来代替。

实验环境说明:
1
2
3
4
[iyunv@es1 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[iyunv@es1 ~]# uname -rm
3.10.0-327.el7.x86_64 x86_64



使用软件说明:1、jdk-8u92  官方rpm包

2、Elasticsearch 2.3.3 官方rpm包
3、Logstash 2.3.2 官方rpm包
4、Kibana 4.5.1 官方rpm包
5、Redis 3.2.1 remi rpm 包
6、nginx 1.10.0-1 官方rpm包
部署顺序说明:1、Elasticsearch集群配置
2、Logstash客户端配置(直接写入数据到ES集群,写入系统messages日志)
3、Redis消息队列配置(Logstash写入数据到消息队列)
4、Kibana部署
5、nginx负载均衡Kibana请求
6、手机nginx日志
7、Kibana报表功能说明
配置注意事项:1、时间必须同步
2、关闭防火墙,selinux
3、出了问题,检查日志

Elasticsearch集群安装配置
1、配置Java环境
1
2
3
4
5
[iyunv@es1 ~]# yum -y install jdk1.8.0_92
[iyunv@es1 ~]# java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)



2、安装Elasticsearch,因为我这里yum源已经创建好,所以可以直接安装
官方文档:https://www.elastic.co/guide/en/ ... /current/index.html
官方下载地址:https://www.elastic.co/downloads/elasticsearch  
1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@es1 ~]# yum -y install elasticstarch
[iyunv@es1 ~]# rpm -ql elasticsearch
/etc/elasticsearch
/etc/elasticsearch/elasticsearch.yml   #主配置文件
/etc/elasticsearch/logging.yml
/etc/elasticsearch/scripts
/etc/init.d/elasticsearch
/etc/sysconfig/elasticsearch
/usr/lib/sysctl.d
/usr/lib/sysctl.d/elasticsearch.conf
/usr/lib/systemd/system/elasticsearch.service    #启动脚本
/usr/lib/tmpfiles.d
/usr/lib/tmpfiles.d/elasticsearch.conf



3、修改配置文件,这里的一些路径看个人习惯
1
2
3
4
5
6
7
8
9
[iyunv@es1 ~]# vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: "linux-ES"
23 node.name: es1.bjwf.com
33 path.data: /elk/data
37 path.logs: /elk/logs
43 bootstrap.mlockall: true
54 network.host: 0.0.0.0
58 http.port: 9200
68 discovery.zen.ping.unicast.hosts: ["192.168.130.221", "192.168.130.222"]



4、创建相关目录并赋予权限
1
2
3
4
5
[iyunv@es1 ~]# mkdir -pv /elk/{data,logs}
[iyunv@es1 ~]# chown -R elasticsearch.elasticsearch /elk
[iyunv@es1 ~]# ll /elk
drwxr-xr-x. 2 elasticsearch elasticsearch 6 Jun 28 03:51 data
drwxr-xr-x. 2 elasticsearch elasticsearch 6 Jun 28 03:51 logs



5、启动ES,并检查是否监听9200和9300端口

1
2
3
4
[iyunv@es1 ~]# systemctl start elasticsearch.service
[iyunv@es1 ~]# netstat -tnlp|egrep "9200|9300"
tcp6   0      0 :::9200   :::*       LISTEN      17535/java         
tcp6   0      0 :::9300   :::*       LISTEN      17535/java



6、安装另一台机器,步骤与第一台一样   

1
2
[iyunv@es2 ~]# vim /etc/elasticsearch/elasticsearch.yml
23 node.name: es2.bjwf.com   #主要修改主机名



7、查看两个节点的状态
wKiom1dyMAnwyLcOAAB1gcxR8iY355.jpg
wKioL1dyMAmQ2oHXAAB7jAcRfv8821.jpg
配置集群管理插件(head、kopf等)
官方提供了一个ES集群管理插件,可以非常直观的查看ES的集群状态和索引数据信息

1
2
[iyunv@es1 ~]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
[iyunv@es1 ~]# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf



访问插件:
http://192.168.130.222:9200/_plugin/head/
wKiom1dyMcnSDRznAACuYsH31pQ619.jpg
http://192.168.130.222:9200/_plugin/kopf/
wKioL1dyMdjgUk02AACX56gWJIk296.jpg
   上面已经把ES集群配置完成了,下面就可以配置Logstash向ES集群中写入数据了


Logstash部署
1、配置Java环境,安装logstash
1
2
[iyunv@logstash1 ~]# yum -y install jdk1.8.0_92
[iyunv@logstash1 ~]# yum -y install logstash



2、通过配置文件验证Logstash的输入和输出
1
2
3
4
5
6
7
8
9
10
[iyunv@logstash1 ~]# vim /etc/logstash/conf.d/stdout.conf
input {
        stdin {}
}

output {
        stdout {
                codec => "rubydebug"
        }
}



wKiom1dyNJOwKWixAABMP79bwys941.jpg
3、定义输出到Elasticsearch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[iyunv@logstash1 ~]# vim /etc/logstash/conf.d/logstash.conf
input {
        stdin {}
}
output {
input {
        stdin {}
}
output {
        elasticsearch {
                hosts => ["192.168.130.221:9200","192.168.130.222:9200"]
                index => "test"
        }
}
[iyunv@logstash1 ~]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf
Settings: Default pipeline workers: 4
Pipeline main started
hello!
你好



wKiom1dyPODgtfZwAAEEZ3deBEg557.jpg 这个时候说明,Logstash接好Elasticsearch是可以正常工作的,下面介绍如何收集系统日志
4、Logstash收集系统日志

修改Logstash配置文件如下所示内容,并启动Logstash服务就可以在head中正常看到messages的日志已经写入到了ES中,并且创建了索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[iyunv@logstash1 ~]# vim /etc/logstash/conf.d/logstash.conf
input {
        file {
          type => "messagelog"
          path => "/var/log/messages"
          start_position => "beginning"
        }
}
output {
        file {
          path => "/tmp/123.txt"
        }
        elasticsearch {
                hosts => ["192.168.130.221:9200","192.168.130.222:9200"]
                index => "system-messages-%{+yyyy.MM.dd}"
        }
}

#检查配置文件语法:
/etc/init.d/logstash configtest
/opt/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf --configtest
#更改启动Logstash用户:
# vim /etc/init.d/logstash
LS_USER=root
LS_GROUP=root
#通过配置文件启动
[iyunv@logstash1 ~]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf &



收集成功如图所示,自动生成了system-messages的索引

wKioL1dyQy6Cl-n9AAHpHRtjtSM303.jpg
Kibana部署
  说明:我这里是在两个ES节点部署kibana并且使用nginx实现负载均衡,如果没有特殊需要,可以只部署单台节点
1
2
3
4
5
6
7
8
1、安装Kibana,每个ES节点部署一个
[iyunv@es1 ~]# yum -y install kibana
2、配置Kibana,只需要指定ES地址其他配置保持默认即可
[iyunv@es1 ~]# vim /opt/kibana/config/kibana.yml
15 elasticsearch.url: "http://192.168.130.221:9200"
[iyunv@es1 ~]# systemctl start kibana.service
[iyunv@es1 ~]# netstat -tnlp|grep 5601    #Kibana监听端口
tcp        0      0 0.0.0.0:5601  0.0.0.0:*     LISTEN      17880/node



查看效果,这个图是盗版的。。我做的这,忘记截图了
wKiom1dyTTnRBnjzAAFLdRHJKyo424.jpg 创建完成后
wKioL1dyTYfhtAZvAAFU22a4a40181.jpg




先写到这,明天继续。。工程量不小啊。。。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-236787-1-1.html 上篇帖子: Elasticsearch安装配置 下篇帖子: Elasticsearch常用操作API
累计签到:1 天
连续签到:1 天
发表于 2016-6-30 14:43:53 | 显示全部楼层
学习了,好资料,正在研究中。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表