ELK之日志搜集系统布署

优采云 发布时间: 2020-08-18 11:33

  ELK之日志搜集系统布署

  目录

  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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线