ELK 是什么?一文全面了解 ELK Stack 企业级日志平台

ELK 是什么?一文全面了解 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 是什么?一文全面了解 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 是什么?一文全面了解 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 是什么?一文全面了解 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> #连接es的地址
#elasticsearch.username: "user" #es用户
#elasticsearch.password: "pass" #es密码
/<http>

3.启动服务

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

4.访问

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

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

ELK 是什么?一文全面了解 ELK Stack 企业级日志平台

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

ELK 是什么?一文全面了解 ELK Stack 企业级日志平台

出图:

ELK 是什么?一文全面了解 ELK Stack 企业级日志平台

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

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

ELK 是什么?一文全面了解 ELK Stack 企业级日志平台

电商月份总收入额:

组件的一些监控:

ELK 是什么?一文全面了解 ELK Stack 企业级日志平台


分享到:


相關文章: