ELK之日志搜集系统布署
优采云 发布时间: 2020-08-18 11:33ELK之日志搜集系统布署
目录
1. EFK 日志搜集系统介绍
在日常维护中,每次线上服务器的Nginx或PHP遇见报错,一般首选方式是开启日志,查看日志内容。我们可能还须要登录到服务器中,利用命令tail -f 查看最新的日志报错,或许还须要利用Linux运维三剑客awk、grep、sed对日志内容过滤、分析等。如果有一套系统能将所有日志搜集在一起,并通过Web界面展示日志内容,或者可以对日志内容进行汇总剖析,以数据表格的方式直观的展示下来,可以为我们节约大量的时间。
由此,社区开发了一套完整的开源的日志采集架构 (ELK Stack)[] ,其中 E 代表 Elasticsearch,L 代表 Logstash,K 代表 Kibana。
社区常用的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 架构布署之安装 Elasticsearch0x01 环境说明
系统: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 环境。
可参考官网:
安装包下载地址: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
访问地址: :9100
如上图所示:
1.在浏览器中输入:9100(ip为布署环境的本机ip)
2.输入框中输入ES的地址::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