ELK之日志收集系统部署
目录
1.EFK 日志收集系统介绍
2.EFK 架构部署之安装 Elasticsearch
3.EFK 架构部署之安装Kinaba
4.EFK 架构部署之安装Logstash
5.EFK 架构部署之安装Kafka
6.EFK 架构部署之安装Filebeat
1. EFK 日志收集系统介绍
在日常维护中,每次线上服务器的Nginx或PHP遇到报错,一般首选方法是开启日志,查看日志内容。我们可能还需要登入到服务器中,利用命令tail -f
查看最新的日志报错,或许还需要借助Linux运维三剑客awk
、grep
、sed
对日志内容过滤、分析等。如果有一套系统能将所有日志收集在一起,并通过Web界面展示日志内容,或者可以对日志内容进行汇总分析,以数据表格的形式直观的展示出来,可以为我们节省大量的时间。
由此,社区开发了一套完整的开源的日志采集架构 (ELK Stack)[https://www.elastic.co/products] ,其中 E
代表 Elasticsearch
,L
代表 Logstash
,K
代表 Kibana
。
-
Elastaticsearch:是一个分布式、可扩展、实时的搜索与数据分析引擎
-
Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置
-
Kibana: 数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示
社区常用的ELK架构的日志采集方案,在ELK+Filebeat 集中式日志解决方案详解 这篇文章中写得比较详细了,这里我就不在多余赘述。
为了搭建一个高可用的 ELK 集中式日志解决方案,我们可以对ELK做进一步的改进,可参考从ELK到EFK演进
我们搭建的日志采集系统架构如下图所示:
在ELK的基础之上,我们采用了Filebeat做日志采集端,如果像ELK中的架构,Logstash作为日志采集端,那么每台服务器都需要安装JAVA环境,因为Logstash是基于Java环境,才能正常使用。而我们采用的 Filebeat 不需要任何依赖,直接安装后,修改配置文件,启动服务即可。当采集到日志文件时,在 input
中我们需要在Filebeat中定义一个 fields
,定义一个log_topic
的字段,将指定路径下的日志文件分为一类。在 Output
中,我们指定 Output
输入至Kafka,并根据 input
Kafka作为一个消息队列,接收来自Filebeat客户端采集上来的所有日志,并根据不同类型的日志(例如nginx、php、system)分类转发。在Kafka中,我们根据 inout
中自定义的日志类型,在kafka中创建不同的topic。
Logstash接收来自Kafka消息队列的消息,根据Kafka中不同的topic,将日志分类写入Elasticsearch中;Kibana匹配Elasticsearch中的索引,可以对日志内容分析、检索、出图展示(当然需要自己设计出图了)。
2.EFK 架构部署之安装 Elasticsearch
0x01 环境说明
系统:CentOS 7
软件版本如下图:
软件 | 版本号 |
---|---|
Kibana | 6.6 |
Elasticsearch | 6.6 |
Logstash | 6.6 |
Filebeat | 6.6 |
metricbet | 6.6 |
Kafka | kafka_2.11-2.1.0 |
Kafka-manage | 1.3.3.22 |
Kafka-eagle | kafka-eagle-web-1.3.0 |
0x02 系统初始化配置
可参考文章:Shell 之CentOS 7 系统初始化
新增配置如下系统参数 (/etc/security/limits.conf
):
# 解除文件描述符限制
* soft nofile 65535
* hard nofile 65535
# 操作系统级别对每个用户创建的进程数的限制
* soft nproc 2048
* hard nproc 2048
# 解除对用户内存大小的限制
* soft memlock unlimited
* hard memlock unlimited
重启服务器
0x03 安装 JDK 8
由于Elasticsearch、Logstash、Kafka-eagle、均需要JDK环境,所以需提前安装 java 环境。
可参考官网:JDK 8 Installation Instructions
安装包下载地址:Java SE Development Kit 8 Downloads
先选择 Accept License Agreement
,再下载对应的安装包, 我这里使用的是 CentOS 7 的系统,所以选择 rpm
的镜像包,若是 Ubuntu
系统的可以选择 .tar.gz
的镜像包
安装步骤可参考:CentOS 7 之安装部署 JDK
rpm 包安装的JDK默认软件安装目录为:/usr/java/jdk1.8.0_201-amd64
,需要配置环境变量,后期的很多软件部署均需要这个路径,最后需检查一下 /usr/bin
目录下是否有java
的执行文件
[root@efk-master ~]# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 Mar 4 11:00 /usr/bin/java -> /etc/alternatives/java
最后查看 java
的版本信息:
[root@efk-master ~]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
到此为止,JDK环境已经部署完毕
0x04 安装 Elasticsearch
由于 Elasticsearch 是构建于 Java 的基础之上的,所以对 java 的版本有一定的要求,需提前配置好 Java 环境。 Elasticsearch 6.6 版本建议安装java的版本为 Java 8发行版中的 1.8.0_131 之后版本均可。官网更推荐使用提供技术支持(LTS)的 Java 版本。安装完 Java 后建议配置 JAVA_HOME
环境变量。
提示:由于我使用的是CentOS 7 64位的操作系统,后续的安装中均会选择 RPM 包的形式安装,而且我是使用的 root
用户权限部署的。
1.下载安装公共密钥:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
2.手动下载安装安装 RPM 包
# 下载 ES rpm 包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.rpm
# 下载 ES 的 sha512 哈希值,保证下载的安装包无数据丢失
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.rpm.sha512
# 验证 哈希值
shasum -a 512 -c elasticsearch-6.6.1.rpm.sha512
# 安装 ES
sudo rpm --install elasticsearch-6.6.1.rpm
3.配置 ES 相关内容,将如下内容添加至主配置文件 /etc/elasticsearch/elasticsearch.yml
中
# 配置 ES 集群的名字,此次没有搭建ES集群,仅为单机部署。但是为了便于后期搭建ES集群,所以需要配置集群名字
cluster.name: efk
# 配置 ES 节点的名字
node.name: es-1
# 是否为主节点
node.master: true
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
# 允许所有网段访问 9200 端口
network.host: 0.0.0.0
# 开启 http 的 9200 端口
http.port: 9200
# 指定集群中的节点中有几个有 master 资格的节点
discovery.zen.minimum_master_nodes: 1
# 以下配置为 head 插件配置
http.cors.enabled: true
http.cors.allow-origin: "*"
4.配置 ES 内存
vim /etc/elasticsearch/jvm.options
#将如下内容:
-Xms1g
-Xmx1g
#更改为
-Xms32g
-Xmx32g
5.运行 ES
# /bin/systemctl daemon-reload
# /bin/systemctl enable elasticsearch.service
# systemctl start elasticsearch.service
6.检查 ES 是否运行正常
a. 确保ES的默认9200端口开启
b. 确保ES的服务正常启动
# 查看端口
# lsof -i :9200
# 查看服务
# ps -ef | grep elasticsearch| grep -v grep
7.浏览器访问 ES
输入本机IP加端口号
http://ip:9200
8.安装 elasticsearch-head
插件(需提前准备好 node.js
环境)
我们先安装部署 node.js 环境
cd /opt/efk
curl -L -O https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz
tar -xf node-v10.15.3-linux-x64.tar.xz
mv node-v10.15.1-linux-x64 /usr/local
配置 node 的环境变量 (/etc/profile
)
# node home
export NODEJS_HOME=/usr/local/node-v10.15.1-linux-x64
export PATH=$PATH:$JAVA_HOME/bin:$NODEJS_HOME/bin
激活环境变量
source /etc/profile
配置软链接
# ln -s /usr/local/node-v10.15.1-linux-x64/bin/node /usr/bin/node
验证是否配置成功
# node --version
v10.15.1
安装 elasticsearch-head
# cd /usr/local
# git clone git://github.com/mobz/elasticsearch-head.git
# cd elasticsearch-head
# npm install
# npm run start
访问地址: http://ip:9100
如上图所示:
1.在浏览器中输入http://ip:9100(ip为部署环境的本机ip)
2.输入框中输入ES的地址:http://ip:9200 (端口号9200为ES的主配置文件中配置的 http.port)
3.由于此文档是在整个EFK日志采集系统搭建完毕后,编写的文档,所以,可能会看到 system
的索引,暂时先忽略。我们重点关注es-1
;如果不记得的话,可以查看前面配置的ES主配置文件,es-1
即为我们前面配置的node.name
;这里提醒我们不要小看任何一个配置选项,既然需要配置,必有其用途。
3.EFK 架构部署之安装 Kibana
1.下载 64位安装包,并安装 Kibana
# cd /opt/efk
# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.1-linux-x86_64.tar.gz
# shasum -a 512 kibana-6.6.1-linux-x86_64.tar.gz
# tar -xzf kibana-6.6.1-linux-x86_64.tar.gz
# mv kibana-6.6.1-linux-x86_64/ /usr/local
- 配置 Kinaba
# kibana 访问端口
server.port: 5601
# kibana 访问 IP 地址
server.host: "192.168.7.3"
# kibana 的服务名
server.name: "efk-master"
# ES 地址
elasticsearch.hosts: ["http://192.168.7.3:9200"]
# kibana 索引
kibana.index: ".kibana"
# ES 登录账号及密码
elasticsearch.username: "admin"
elasticsearch.password: "admin"
# kibana 进程 ID 路径
pid.file: /var/run/kibana.pid
3.启动服务
执行kibana的二进制文件,此命令执行后,进程会在前台运行,后期我们会使用 Supervisord 的方式部署。
# /usr/local/kibana-6.6.0-linux-x86_64/bin/kibana
4.访问kibana
http:ip:5601
点击 Management
选项,出现如下图所示:
点击 Elasticsearch
中的 Index Management
,
如果是刚刚搭建的kibana,ES中是没有这些索引,现在看到的索引即时根据采集的不同日志,创建的不同的索引值。在后期会讲到如何根据不同的日志创建不同的ES索引。
如上图,如果我们的数据已写入 ES 中后,我们需要在 Kibana 中根据ES中的索引值,创建对应的索引匹配形式。创建完Kibana中的索引匹配后,可以点击Discory
,即可以根据不同的索引查看到相关的日志内容了。
4.EFK 架构部署之安装 Logstash
1.下载RPM 包,并安装
# cd /opt/efk
# curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-6.6.1.rpm
# rpm -iv logstash-6.6.1.rpm
安装完成即可,如何配置在后续内容中讲到。
5.EFK 架构部署之安装 Kafka
可参考官方文档:Quickstart
1.下载Kafka安装包
# cd /opt/efk
# curl -L -O https://www.apache.org/dyn/closer.cgi?path=/kafka/2.1.0/kafka_2.11-2.1.0.tgz
# tar -xzf kafka_2.11-2.1.0.tgz
# mv kafka_2.11-2.1.0 /usr/local
由于kafka是用脚本启动的,脚本路径在: /usr/local/kafka_2.11-2.1.0/bin
,后期我们使用 Supervisord 启动。
6.EFK 架构部署之安装 Filebeat
1.下载安装 Filebeat
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.1-x86_64.rpm
sudo rpm -vi filebeat-6.6.1-x86_64.rpm
需要对默认配置进行修改。
提示: RPM包安装的Elasticsearch、Logstash、Filebeat,默认安装路径在 /usr/share
目录下,对应的配置文件在 /etc
目录下,
例如:Elasticsearch 安装目录在 /usr/share/elasticsearch
目录下,配置文件在 /etc/elasticsearch
目录下。