ELK Stack 企业级日志平台

一、ELK Stack概述

官方话:ELK一款轻量级的实时日志收集,处理,展示系统。

为什么用ELK:

  1. 业务需求,市场的需求
  2. 开发与产品的需求,运维的一种责任
  3. 大数据也是当前的一个前景

1.1 ELK介绍及优缺点

ELK日志分析系统的优势

  1. 使用方便,直接解决了我们的需求,并且是开源的;
  2. 相对来说,学习还是配置都是相对简单的;
  3. ES搜索快,基本上是秒级的;
  4. 架构相对简单,横向扩展方便。

ELK日志分析系统的缺点

  1. Logstash耗资源较大,运行占用CPU和内存高;
  2. 另外,没有消息队列缓存,存在数据丢失隐患。

二、ELK Stack架构

ELK Stack 企业级日志平台

ELK是Elasticsearch、Logstash、Kibana三个开源软件的组合而成,形成一款强大的实时日志收集展示系统。除了相关的beat相关采集插件外,基本都是基于这个架构来完成。

  • 日志采集层: logstash或 filebeat
  • 消息代理层: redis或kafka。
  • 管理层: logstash
  • 搜索引擎层: Elasticsearch
  • 展示层: kibana

Filebeat隶属于Beats(社区)。目前Beats包含四种工具:

  1. Packerbeat (搜集网络流量数据)
  2. Topbeat (搜集系统,进程和文件系统级别的CPU和内存使用情况等数据)
  3. Filebeat(搜集文件数据)
  4. Winlogbeat(搜集windows事件日志数据)

Redis和kafka的作用

  1. 那如果logstash和ES无法通讯的话,日志是不是会从而丢失?
  2. 那如果日志量过大的话,日志是不是会从而丢失?
  3. 防止logstash 直接与ES操作,产生大量的链接,导致ES瓶颈!

生产环境拓扑图:

ELK Stack 企业级日志平台

三、ELK Stack搭建

环境规划

操作系统:CentOS-6.5-x86_64

ES版本:5.0

主机:192.168.63.246

主机:192.168.63.242

3.1 Elasticsearch安装与集群配置

  1. 安装JDK

# yum install open-jdk.1.8
# java –version
openjdk version "1.8.0_101"
OpenJDK Runtime Environment (build 1.8.0_101-b13)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)
  1. 安装Elasticsearch,下载解压即可

[root@module-kzkt-02 opt]# cd /opt
[root@module-kzkt-02 opt]# tar zcvf elasticsearch-5.3.1.tar.gz
  1. 配置Elasticsearch

[root@module-kzkt-02 opt]# cd elasticsearch-5.3.1/config/  
[root@module-kzkt-02 config]# vim elasticsearch.yml      
cluster.name: es-log                #集群名
node.name: node-1       #节点名称
path.data: /path/to/data    #存储数据地址
path.logs: /path/to/logs   #存储日志地址
bootstrap.memory_lock: true  #当内存不足时,是否使用交换分区空间
network.host: 10.0.1.7     #IP地址
http.port: 9200        #通讯端口
discovery.zen.ping.unicast.hosts: ["host1", "host2"]  #集群地址IP
discovery.zen.minimum_master_nodes: 3      #集群节点个数

系统配置:

当消耗完交换分区这么大空间后才会产生oom:
# vim /etc/sysctl.conf  
vm.max_map_count=262144
# sysctl –p          

系统的打开文件数:
# vim /etc/security/limits.conf    
* soft nofile 655350
* hard nofile 655350

修改用户打开的线程数,因为es的段要经常打开文件控制索引:
# vim /etc/security/limits.d/20-nproc.conf
*    soft nproc  4096

切换到普通用户启动:

[root@module-kzkt-02 bin]# su - elk
[elk@module-kzkt-02 logs]$ cd /opt/elasticsearch-5.3.1/bin/
[elk@module-kzkt-02 bin]$ ./elasticsearch
  1. 要是提示,报一些没有启动的目录,直接创建即可。
  2. 但是想写入日志和数据必须是普通用户有写入权限logs,data。

启动之后:有如下显示表示已经安装成功。

[root@module-kzkt-02 bin]# curl -XGET '10.0.1.7:9200'
{
"name" : "node-1",
"cluster_name" : "es-log",
"cluster_uuid" : "ZKwbyR74RHqKhUMyzFSQ5A",
"version" : {
 "number" : "5.3.1",
 "build_hash" : "5f9cf58",
 "build_date" : "2017-04-17T15:52:53.846Z",
 "build_snapshot" : false,
 "lucene_version" : "6.4.2"
},
"tagline" : "You Know, for Search"
}

扩展:集群启动设置

假如说只有一个节点,那么es就当做自己是一个集群。

一个节点(node)就是一个Elasticsearch实例,而一个集群(cluster)由一个或多个节点组成,它们具有相同的cluster.name,它们协同工作,分享数据和负载。

当加入新的节点或者删除一个节点时,集群就会感知到并平衡数据。

3.2 Logstash安装与配置

1.  下载解压即可

[root@module-kzkt-02 opt]# cd /opt/
[root@module-kzkt-02 opt]# tar xf logstash-6.2.4.tar.gz

2.  配置文件修改

[root@module-kzkt-02 config]# vim config/logstash_to_es.conf
input {
 file {
   type => "log"
   path => "/usr/local/nginx/logs/\*.log"
   discover_interval => 10
   start_position => "beginning"
 }
}

filter {
}

output {
 elasticsearch {
 index => "log-%{+YYYY.MM.dd}"
 hosts => ["10.0.1.7:9200"]
 }

stdout {codec => rubydebug}

也支持条件判断,例如:

if [type] == "****"{
   elasticsearch {
     hosts => ["192.168.1.1:9200"]
     index => "system-%{+YYYY.MM.dd}"
   }
 }

 if [type] == "****"{
   elasticsearch {
     hosts => ["192.168.1.160:9200"]
     index => "es-error-%{+YYYY.MM.dd}"
   }
 }

我的配置文件如下:

ELK Stack 企业级日志平台

3.  启动服务

[root@module-kzkt-02 bin]# nohup ./bin/logstash -f config/logstash_to_es.conf & 

3.3 Filebeat安装与配置

1.下载解压即可

[root@module-kzkt-02 opt]# cd /opt/
[root@module-kzkt-02 opt]# tar xf filebeat-5.3.1-linux-x86_64

2.配置文件修改

[root@module-kzkt-02 filebeat-5.3.1-linux-x86_64]# vim filebeat.yml
- input_type: log     #类型
paths:
- /var/log/*.log       #需要采集的日志路径
- /                 #多个的话直接添加
exclude_files: [".gz$"] :  #移除这个目录下面相关gz结尾的文件
exclude_lines: ["^DBG"]:  #表示移除什么样的结尾的行。

output.elasticsearch:
hosts: ["localhost:9200"]

也可以输出到Logstash、Redis等,示例:

输出到logstash:
output.logstash:
hosts: ["localhost:5044"]

输出到redis:
output.redis:
hosts: ["localhost"]
password: "my_password"
key: "filebeat"
db: 0
timeout: 5

3.4 Kibana安装与配置

1.下载解压即可

[root@module-kzkt-02 opt]# cd /opt/
[root@module-kzkt-02 opt]# tar xf kibana-5.3.1-linux-x86_64.tar.gz

2.配置文件修改

[root@module-kzkt-02 config]# cd /opt/kibana-5.3.1-linux-x86_64/config/
[root@module-kzkt-02 config]# vim kibana.yml
server.port: 5601              #服务端口
server.host: "10.0.1.7"           #服务IP
elasticsearch.url: <http://10.0.1.7:9200>  #连接es的地址
#elasticsearch.username: "user"       #es用户 
#elasticsearch.password: "pass"       #es密码

3.启动服务

[root@module-kzkt-02 bin]# ./kibana

4.访问

直接访问: http://IP:5601

刚开始有个初始化的步骤,可能要等一会。

ELK Stack 企业级日志平台

要创建一个索引:Management–>>index Partterns–>>Add New

ELK Stack 企业级日志平台
ELK Stack 企业级日志平台

ELK还支持非常丰富的仪表盘功能,可视化展示关键数据,以下是公司6.x版本kibana展示的数据。

官网总访问量及总字节数:

ELK Stack 企业级日志平台

电商月份总收入额:

ELK Stack 企业级日志平台

组件的一些监控:

ELK Stack 企业级日志平台

版权声明

文章来源:DevOps技术栈 作者: 小马哥 

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论