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运维三剑客awkgrepsed对日志内容过滤、分析等。如果有一套系统能将所有日志收集在一起,并通过Web界面展示日志内容,或者可以对日志内容进行汇总分析,以数据表格的形式直观的展示出来,可以为我们节省大量的时间。

      由此,社区开发了一套完整的开源的日志采集架构 (ELK Stack)[https://www.elastic.co/products] ,其中 E 代表 ElasticsearchL 代表 LogstashK 代表 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 环境

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
  1. 配置 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 目录下。


参考文章:

ELK+Filebeat 集中式日志解决方案详解
从ELK到EFK演进
部署和扩展 ELK

posted @ 2019-03-11 16:02  McSiberiaWolf  阅读(1760)  评论(0编辑  收藏  举报