内容采集系统(社区常用的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