内容采集系统(社区常用的ELK架构的日志采集系统架构(ELK))

优采云 发布时间: 2022-04-06 10:21

  内容采集系统(社区常用的ELK架构的日志采集系统架构(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的演进

  我们搭建的log采集系统架构如下图所示:

  

  在 ELK 的基础上,我们使用 Filebeat 作为 log采集 端。如果像ELK中的架构一样使用Logstash作为log采集端,那么每台服务器都需要安装JAVA环境,因为Logstash是基于Java环境的,所以可以正常使用。我们使用的 Filebeat 不需要任何依赖。直接安装后,修改配置文件,启动服务。当采集进入日志文件时,在输入中,我们需要在Filebeat中定义一个字段,定义一个log_topic字段,将指定路径下的日志文件归为一类。在Output中,我们指定输出到Kafka的输入,并根据输入

  Kafka作为一个消息队列,接收来自Filebeat客户端采集的所有日志,并根据不同类型的日志(如nginx、php、system)进行转发。在 Kafka 中,我们根据 inout 中自定义的日志类型在 Kafka 中创建不同的主题。

  Logstash 接收来自 Kafka 消息队列的消息,并根据 Kafka 中的不同主题将日志写入 Elasticsearch;Kibana 匹配 Elasticsearch 中的索引,可以分析、检索、展示日志内容(当然需要自己设计图表)。

  

  2.EFK架构部署安装Elasticsearch0x01环境说明

  系统:CentOS 7

  软件版本如下:

  软件版本号

  木花

  6.6

  弹性搜索

  6.6

  日志存储

  6.6

  文件节拍

  6.6

  公制投注

  6.6

  卡夫卡

  kafka_2.11-2.1.0

  卡夫卡管理

  1.3.3.22

  卡夫卡鹰

  kafka-eagle-web-1.3.0

  0x02 系统初始化配置

  请参考文章:CentOS 7系统初始化Shell

  新配置以下系统参数(/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

  

  首先选择接受许可协议,然后下载相应的安装包。我这里使用的是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 8 版本中推荐安装 java 版本为 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是否正常运行

  一种。确保ES的默认端口9200是打开的

  湾。确保ES服务正常启动

  # 查看端口

# lsof -i :9200

# 查看服务

# ps -ef | grep elasticsearch| grep -v grep

  7.浏览器访问 ES

  输入本地IP和端口号

  http://ip:9200

  8.安装elasticsearch-head插件(需要提前准备好node.js环境)

  我们首先安装部署node.js环境

  节点.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

  配置节点环境变量(/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

  安装弹性搜索头

  # 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 log采集系统搭建完成之后写的,所以你可能会看到系统的索引,但是暂时忽略它。我们专注于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

  配置京那巴

  # 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人工客服


线