Centos7 安装ELK/EFK 7.x 集群搭建实战攻略

  • 1.1 写在前面的话
  • 1.2 开始之前
  • 1.3 安装ELK/EFK
    • 1.3.1 海量数据存储和检索——>E——>安装Elasticsearch
      • 1.3.1.1 下载和解压Elasticsearch
      • 1.3.1.2 修改配置
        • 1.3.1.2.1 修改操作系统限制
        • 1.3.1.2.2 创建ES 用户
        • 1.3.1.2.3 修改 elasticsearch.yml 配置文件
      • 1.3.1.3 启动Elasticsearch
      • 1.3.1.4 Elasticsearch 安装访问密码
      • 1.3.1.5 访问Elasticsearch
      • 1.3.1.6 Elasticsearch健康检查
    • 1.3.2 可视化界面和图表生成——> K——>安装Kibana
      • 1.3.2.1 下载并解压Kibana
      • 1.3.2.2 访问Kibana
    • 1.3.3 数据采集
      • 1.3.3.1 方法一:L——> 使用Logstash 采集日志
        • 1.3.3.1.1 下载和解压Logstash
        • 1.3.3.1.2 修改配置文件
        • 1.3.3.1.3 启动Logstash
      • 1.3.3.1 方法二:F——> 使用FileBeat 采集日志
        • 1.3.3.1.1 下载和安装FileBeat
        • 1.3.3.1.2 配置Filebeat连接到Elasticsearch 和Kibana
        • 1.3.3.1.3 配置Filebeat日志收集实现方式
          • 1.3.3.1.3.1 方式一: 启用和配置数据收集模块
          • 1.3.3.1.3.2 方式二: 手动配置Filebeat监控日志文件位置
        • 1.3.3.1.4 测试Filebeat配置是否正确
        • 1.3.3.1.5 启动filebeat
  • 1.4 查看Kibna 日志结果
  • 1.5 附录
    • 1.5.1 Elasticsearch 解释
      • 1.5.1.1 Elasticsearch目录结构详解
      • 1.5.1.2 Elasticsearch配置文件详解
      • 1.5.1.3 nginx 反向代理ES 配置

1.1 写在前面的话

如果你正在寻找如何快速安装和配置ELK,那么恭喜你找对教程了。

这篇博文我们就来分享下如何在Centos7 服务器上搭建ELK 7.x 版本.

1.2 开始之前

在开始搭建之前,我们首先需要先检查 ELK 对 自己服务器的操作系统以及 JDK 是否兼容。

  • 点击查看ELK对操作系统是否兼容

  • 点击查看ELK对JDK是否兼容信息列表

  • 虽然官网说ES 7.12 支持JDK8,但是实际测试发现,ES 7.12 开始至少需要JDK11 以上版本。

否则会报错如下:

Future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/java/jdk/jdk1.8.0_161/jre] does not meet this requirement. Consider switching to a distribution of Elasticsearch with a bundled JDK. If you are already using a distribution with a bundled JDK, ensure the JAVA_HOME environment variable is not set.
  • 因此我们的服务器最好使用JDK11长期支持版本。

要安装 ES 集群,建议确保服务器满足以下最低要求:

  • 内存:至少 4GB RAM
  • 存储:至少 50GB 硬盘空间
  • 处理器:双核 CPU
  • 操作系统:支持 64 位的Linux、Windows、MacOS 等操作系统

请注意,这些是最低要求,并且在实际部署 ES集群时,还要考虑负载、数据大小、并发查询等因素,因此建议选择高性能的硬件配置。

ELK 是Elasticsearch ,Logstash, Kibana 的简称缩写,主要专注于可视化日志分析和查询

Elastic Stack 主要包括三大部分,

  • 海量数据存储和检索----- Elasticsearch 分布式存储和查询
  • 可视化界面和图表生成----Kibana 可提供可视化界面和各种图表的生成。
  • 数据采集-----可以用Logstash采集日志也可以使用FileBeat 采集日志。

所以ELK 不过是Elastic Stack 用法中日志分析栈的一部分罢了。

Elastic Beats To capture
Auditbeat Audit data (审计数据)
Filebeat Log File(日志文件)
Functionbeat Cloud data (云数据)
Heartbeat Availability monitoring(可用性数据)
Journalbeat Systemd journals (系统日志)
Metricbeat Metrics (指标数据)
Packetbeat Network traffic (网络流量数据)
Winlogbeat Windows event logs (Windows事件日志)

说明

  • 不知道你们有没有注意到,官网似乎已经有意在使用FileBeat 替换Logstash 采集日志了。
  • Logstash 是由 Elastic 公司推出的一款开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送指定的存储库中。Logstash 官方介绍。
  • Filebeat 是 Elastic 公司为解决 Logstash “太重” 的问题推出的一款轻量级日志采集器,在处理数量众多的服务器、虚拟机和容器生成的日志时可使用 Logstash + Filebeat 的日志采集方式。Filebeat 官方介绍。

1.3 安装ELK/EFK

ELK/EFK 集群搭建安装说明:

服务器IP 安装软件说明
192.168.159.11 Elasticsearch,Kibana,Logstash,FileBeat
192.168.159.12 Elasticsearch,Logstash,FileBeat
192.168.159.13 Elasticsearch,Logstash,FileBeat

1.3.1 海量数据存储和检索——>E——>安装Elasticsearch

Elasticsearch,江湖人称ES,它是一个实时的分布式存储,搜索和分析引擎。

为什么用Elasticsearch?

  • 场景一: 当检索“我是中国人”,普通关系型数据库只能查找%我是中国人%的记录,无法搜索“我是 中国人
  • 场景二: 找到与查询最匹配的 10 个文档并不困难。但如果面对的是十亿行日志,又该如何解读呢?

ES 因为拥有分布式存储,分词,高效海量数据查询的功能,因此是查询领域的王者!

1.3.1.1 下载和解压Elasticsearch

  • 下载方式一:直接下载

ES 的官方下载地址: https://www.elastic.co/cn/downloads/elasticsearch

  • 下载方式二: 使用命令行下载

使用curl 命令行下载ES

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.0-linux-x86_64.tar.gz
  • 如果操作系统不支持curl命令也可以使用wget命令下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.0-linux-x86_64.tar.gz
  • 如果提示没有curl 命令则输入如下命令安装
yum install curl
  • 这种压缩包解压安装方式不支持系统服务启动,要想系统服务启用需要使用包管理器安装。
  • 但是由于包管理器安装有时候版本过于老旧,因此这里我们采用压缩包解压方式安装。
  • 解压ES
tar -xzvf elasticsearch-7.12.0-linux-x86_64.tar.gz
  • 进入ES 文件夹
cd elasticsearch-7.12.0

1.3.1.2 修改配置

接下来我们将会把ES 分别上传到192.168.159.11,192.168.159.12,192.168.159.13 三台服务器上搭建集群。

1.3.1.2.1 修改操作系统限制

在Centos7 Linux 操作系统中,默认单个进程可以打开的最多文件数是1024

但是ES 对操作系统有些特殊要求

  • 要求操作系统单个进程可以打开的最大文件数最少要达到65535.
  • 而且ES 将会使用很多线程,也需要修改下操作系统限制。

如果不配置就会报错如下所示:

bootstrap checks failed. You must address the points described in the following [3] lines before starting Elasticsearch.
bootstrap check failure [1] of [3]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
bootstrap check failure [2] of [3]: max number of threads [3687] for user [elasticsearch] is too low, increase to at least [4096]
bootstrap check failure [3] of [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决方案:

如果想检查当前操作系统支持单个进程可以打开的最多文件数输入如下命令即可:

ulimit -n

返回值如果没修改会显示1024

要修复bootstrap check failure [1] of [3]bootstrap check failure [2] of [3]错误

需要修改/etc/security/limits.conf

vi /etc/security/limits.conf

编辑内容如下:

*               soft    nofile          65535
*               hard    nofile          65535
*               hard    nproc           4096
*               soft    nproc           4096
  • 设置限制数量,第一列表示用户,* 表示所有用户

    • soft nproc :单个用户可用的最大进程数量(超过会警告);
    • hard nproc:单个用户可用的最大进程数量(超过会报错);
    • soft nofile :可打开的文件描述符的最大数(超过会警告);
    • hard nofile :可打开的文件描述符的最大数(超过会报错);
      原文链接:https://blog.csdn.net/zxljsbk/article/details/89153690
  • 断开session 链接,重新登陆生效

要修复bootstrap check failure [3] of [3] 错误,需要修改/etc/sysctl.conf

vi /etc/sysctl.conf

编辑内容如下:

vm.max_map_count=262144
  • vm.max_map_count 配置确保操作系统拥有足够多的虚拟内存
  • 如果使用的是包管理器方式安装,那么不需要这个操作,默认会进行配置。

刷新配置立即生效

sysctl -p
1.3.1.2.2 创建ES 用户

除此之外,ES 7.x 开始不再允许以任何方式使用root 用户直接操作ES,因此需要创建一个非root 用户。

  • ES 7.x 之前支持通过命令参数强行允许使用root用户执行ES, 但为了安全性,ES7.x 不再允许。
  • 如果想查看当前Linux 下的所有用户列表,可输入如下命令:
compgen -u

因此我们还需要创建一个叫做非root用户,比如我们新创建一个叫做es_user的用户

# 创建用户
adduser es_user

然后为es_user 用户创建登陆密码,至少需要八位

# 选择要修改密码的用户名称
passwd es_user

执行后会提示两次输入密码,比如我们设置密码为es611521
New Password: es611521
Retype new password: es611521

再然后将es文件夹的操作权限授予es_user用户

如果是单节点集群, 配置如下即可:

# 授予执行权限
chmod u+x  /usr/local/es/elasticsearch-7.12.0/bin
# ES 文件夹权限授权给es_user 用户
chown -R es_user /usr/local/es/
# 创建数据文件夹
mkdir -p /var/data/es/es-node-1/
# 将ES数据存储文件夹权限授权给es_user用户
chown -R es_user /var/data/es/es-node-1/
# 创建日志文件夹
mkdir -p /var/log/es/es-node-1/
# 将ES 日志存储文件夹权限授权给es_user用户
chown -R es_user /var/log/es/es-node-1/

如果是多节点集群的话配置如下:

# 分配权限给192.168.159.11
# 授予执行权限
chmod u+x  /usr/local/es/elasticsearch-7.12.0-node-1/bin
# ES 文件夹权限授权给es_user 用户
chown -R es_user /usr/local/es/
# 创建数据文件夹
mkdir -p /var/data/es/es-node-1/
# 将ES数据存储文件夹权限授权给es_user用户
chown -R es_user /var/data/es/es-node-1/
# 创建日志文件夹
mkdir -p /var/log/es/es-node-1/
# 将ES 日志存储文件夹权限授权给es_user用户
chown -R es_user /var/log/es/es-node-1/# 分配权限给192.168.159.12
# 授予执行权限
chmod u+x  /usr/local/es/elasticsearch-7.12.0-node-2/bin
# ES 文件夹权限授权给es_user 用户
chown -R es_user /usr/local/es/
# 创建数据文件夹
mkdir -p /var/data/es/es-node-2/
# 将ES数据存储文件夹权限授权给es_user用户
chown -R es_user /var/data/es/es-node-2/
# 创建日志文件夹
mkdir -p /var/log/es/es-node-2/
# 将ES 日志存储文件夹权限授权给es_user用户
chown -R es_user /var/log/es/es-node-2/# 分配权限给192.168.159.13
# 授予执行权限
chmod u+x  /usr/local/es/elasticsearch-7.12.0-node-3/bin
# ES 文件夹权限授权给es_user 用户
chown -R es_user /usr/local/es/
# 创建数据文件夹
mkdir -p /var/data/es/es-node-3/
# 将ES数据存储文件夹权限授权给es_user用户
chown -R es_user /var/data/es/es-node-3/
# 创建日志文件夹
mkdir -p /var/log/es/es-node-3/
# 将ES 日志存储文件夹权限授权给es_user用户
chown -R es_user /var/log/es/es-node-3/
1.3.1.2.3 修改 elasticsearch.yml 配置文件
  • 进入config 文件
cd config
  • 编辑elasticsearch.yml
vi elasticsearch.yml
  • ES单节点 elasticsearch.yml配置示例如下:
# 集群名称
cluster.name: my-application
# 集群节点名称
node.name: node-1
# ES默认 只允许本地 127.0.0.1 和[::1] 访问
# 也可以设置成0.0.0.0 允许所有IP主机访问
# 如果不配置就默认认为是开发者模式,如果配置不正确会写入警告但是能正确运行
# 如果配置了就会认为进入了生产环境, 如果配置不正确就会升级为异常,ES无法正确启动。
network.host: 0.0.0.0
# 默认ES节点端口9200,如果是伪集群(在一台服务器上搭建集群),需要修改。
http.port: 9200
# 设置数据存放路径,建议修改这个路径到ES的安装文件夹外面,避免ES升级误删掉这个文件夹
path.data: /var/data/es/es-node-1/
# 设置日志存放路径,建议修改这个路径到ES的安装文件夹外面,避免ES升级误删掉这个文件夹
path.logs: /var/log/es/es-node-1/
# 发现其他节点主机配置 这里配置的是ES所在服务器的公网IP地址
discovery.seed_hosts: ["192.168.159.11"]
# 哪些节点可以被选举为主节点配置
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

如果需要设置远程访问密码,那么需要在elasticsearch-7.12.0/config/elasticsearch.yml最后面添加配置如下

http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

关于discovery.seed_hosts节点配置可以支持如下几种配置方式

discovery.seed_hosts:  ["192.168.159.11","192.168.1.12:9301","seeds.mydomain.com","[0:0:0:0:0:ffff:c0a8:10c]:9301"]
  • 第一种配置方式: 192.168.159.11 ,隐式指定端口,默认是9300
  • 第二种配置方式: 192.168.1.12:9301 ,显式指定占用端口
  • 第三种配置方式: seeds.mydomain.com ,域名解析方式
  • 第四种配置方式: [0:0:0:0:0:ffff:c0a8:10c]:9301"], IPV6配置方式

如果配置多节点集群,配置如下所示:

  • ES多节点集群节点一 elasticsearch.yml配置示例如下:
# 集群名称
cluster.name: my-application
# 集群节点名称
node.name: node-1
# ES默认 只允许本地 127.0.0.1 和[::1] 访问
# 也可以设置成0.0.0.0 允许所有IP主机访问
# 如果不配置就默认认为是开发者模式,如果配置不正确会写入警告但是能正确运行
# 如果配置了就会认为进入了生产环境, 如果配置不正确就会升级为异常,ES无法正确启动。
network.host: 0.0.0.0
# 默认ES节点端口9200,如果是伪集群(在一台服务器上搭建集群),需要修改。
http.port: 9200
# 设置数据存放路径,建议修改这个路径到ES的安装文件夹外面,避免ES升级误删掉这个文件夹
path.data: /var/data/es/es-node-1/
# 设置日志存放路径,建议修改这个路径到ES的安装文件夹外面,避免ES升级误删掉这个文件夹
path.logs: /var/log/es/es-node-1/
# 发现其他节点主机配置 这里配置的是ES所在服务器的公网IP地址
discovery.seed_hosts: ["192.168.159.11:9300","192.168.159.12:9300","192.168.159.13:9300"]
# 哪些节点可以被选举为主节点配置
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
  • ES多节点集群节点二 elasticsearch.yml配置示例如下:
# 集群名称
cluster.name: my-application
# 集群节点名称
node.name: node-2
# ES默认 只允许本地 127.0.0.1 和[::1] 访问
# 也可以设置成0.0.0.0 允许所有IP主机访问
# 如果不配置就默认认为是开发者模式,如果配置不正确会写入警告但是能正确运行
# 如果配置了就会认为进入了生产环境, 如果配置不正确就会升级为异常,ES无法正确启动。
network.host: 0.0.0.0
# 默认ES节点端口9200,如果是伪集群(在一台服务器上搭建集群),需要修改。
http.port: 9200
# 设置数据存放路径,建议修改这个路径到ES的安装文件夹外面,避免ES升级误删掉这个文件夹
path.data: /var/data/es/es-node-2/
# 设置日志存放路径,建议修改这个路径到ES的安装文件夹外面,避免ES升级误删掉这个文件夹
path.logs: /var/log/es/es-node-2/
# 发现其他节点主机配置 这里配置的是ES所在服务器的公网IP地址
discovery.seed_hosts: ["192.168.159.11:9300","192.168.159.12:9300","192.168.159.13:9300"]
# 哪些节点可以被选举为主节点配置
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
  • ES多 节点集群节点三 elasticsearch.yml配置示例如下:
# 集群名称
cluster.name: my-application
# 集群节点名称
node.name: node-3
# ES默认 只允许本地 127.0.0.1 和[::1] 访问
# 也可以设置成0.0.0.0 允许所有IP主机访问
# 如果不配置就默认认为是开发者模式,如果配置不正确会写入警告但是能正确运行
# 如果配置了就会认为进入了生产环境, 如果配置不正确就会升级为异常,ES无法正确启动。
network.host: 0.0.0.0
# 默认ES节点端口9200,如果是伪集群(在一台服务器上搭建集群),需要修改。
http.port: 9200
# 设置数据存放路径,建议修改这个路径到ES的安装文件夹外面,避免ES升级误删掉这个文件夹
path.data: /var/data/es/es-node-3/
# 设置日志存放路径,建议修改这个路径到ES的安装文件夹外面,避免ES升级误删掉这个文件夹
path.logs: /var/log/es/es-node-3/
# 发现其他节点主机配置 这里配置的是ES所在服务器的公网IP地址
discovery.seed_hosts: ["192.168.159.11:9300","192.168.159.12:9300","192.168.159.13:9300"]
# 哪些节点可以被选举为主节点配置
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
  • yml文件配置key和value 之间要有一个空格
  • 如果是单节点集群配置这一个就行了,如果是多个要继续配置其他两个。
  • 退出当前配置文件夹
cd ..

1.3.1.3 启动Elasticsearch

最后切换用户登陆

# 切换用户
su es_user
  • 启动ES
./bin/elasticsearch
  • 第一次启动建议前台启动,观测没有错误后再使用后台守护线程启动
  • 前台启动后,如果想退出,可以按键盘Ctrl+C 进行退出
  • 如果需要后台运行的话,那么增加下启动参数即可:
./bin/elasticsearch -d -p pid

注意:

  • 其中-d 表示后台守护进程启动, -p 表示将生成的进程Id存储到文件中。
  • ES 默认启动会加载 $ES_HOME/config/ 文件夹下elasticsearch.yml 中的配置

1.3.1.4 Elasticsearch 安装访问密码

刚才我们的健康检查和对ES的一些接口访问时公开的,这样是不安全的,对于生产环境我们一般需要为ES设置密码。

由于ES 和其他组件进行交互,因此我们需要依次设置密码。

值得注意的是,

  • ES 必须先启动,然后才能使用elasticsearch-setup-passwords 为ES相关的组件所使用的各个用户安装密码。
  • 因为不同的用户有不同的权限

接下来我们开始设置密码:

./bin/elasticsearch-setup-passwords interactive

ES 的安装文件夹下的bin 目录下,可以找到一个叫做elasticsearch-setup-passwords的可执行文件.

命令执行后就会显示如下内容提示:

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]yEnter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana_system]:
Reenter password for [kibana_system]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

我们依次要为elastic,apm_system,kibana_system,logstash_system,beats_system,remote_monitoring_user 用户设置远程访问密码。

  • elastic 账号是用于es 首页 以及 kibana web界面登陆的超级管理员账号
  • kibana_system 账号是kibana 连接es 配置中需要用到的账号

1.3.1.5 访问Elasticsearch

检查多集群节点一

  • http://192.168.159.11:9200/

就会发现需要提示输入密码

这里输入 账号 和 刚才设置的密码就可以登陆了。

  • 默认账号是: elastic
  • 密码:刚才设置的密码

执行成功后会返回类似下面的内容

{"name": "node-1","cluster_name": "my-application","cluster_uuid": "M0PH3gmtRu2Ov0mlP6uZDA","version": {"number": "7.12.0","build_flavor": "default","build_type": "tar","build_hash": "78722783c38caa25a70982b5b042074cde5d3b3a","build_date": "2021-03-18T06:17:15.410153305Z","build_snapshot": false,"lucene_version": "8.8.0","minimum_wire_compatibility_version": "6.8.0","minimum_index_compatibility_version": "6.0.0-beta1"},"tagline": "You Know, for Search"
}

检查多集群节点二

  • http://192.168.159.12:9200/
{"name": "node-2","cluster_name": "my-application","cluster_uuid": "M0PH3gmtRu2Ov0mlP6uZDA","version": {"number": "7.12.0","build_flavor": "default","build_type": "tar","build_hash": "78722783c38caa25a70982b5b042074cde5d3b3a","build_date": "2021-03-18T06:17:15.410153305Z","build_snapshot": false,"lucene_version": "8.8.0","minimum_wire_compatibility_version": "6.8.0","minimum_index_compatibility_version": "6.0.0-beta1"},"tagline": "You Know, for Search"
}

检查多集群节点三

  • http://192.168.159.13:9200/
{"name": "node-3","cluster_name": "my-application","cluster_uuid": "M0PH3gmtRu2Ov0mlP6uZDA","version": {"number": "7.12.0","build_flavor": "default","build_type": "tar","build_hash": "78722783c38caa25a70982b5b042074cde5d3b3a","build_date": "2021-03-18T06:17:15.410153305Z","build_snapshot": false,"lucene_version": "8.8.0","minimum_wire_compatibility_version": "6.8.0","minimum_index_compatibility_version": "6.0.0-beta1"},"tagline": "You Know, for Search"
}

如果访问不了,那么三种解决方案:

  • 方案一:选择关闭防火墙
systemctl stop firewalld.service
  • 方案二:开放指定端口
    可以使用如下命令开放 TCP 9200 端口
firewall-cmd --permanent --add-port=9200/tcp --zone=public

或者使用如下命令开放 TCP 9200 端口

iptables -I INPUT -p tcp --dport 9200 -j ACCEPT
  • 方案三:
    使用nginx 反向代理配置,屏蔽开放端口。

1.3.1.6 Elasticsearch健康检查

  • 访问节点一健康检查地址: http://192.168.159.11:9200/_cat/health

返回结果如下:

1619259896 10:24:56 my-application green 3 3 12 6 0 0 0 0 - 100.0%
  • 访问节点一健康检查地址: http://192.168.159.12:9200/_cat/health

返回结果如下:

1619259975 10:26:15 my-application green 3 3 12 6 0 0 0 0 - 100.0%
  • 访问节点一健康检查地址: http://192.168.159.13:9200/_cat/health

返回结果如下:

1619260004 10:26:44 my-application green 3 3 12 6 0 0 0 0 - 100.0%

从数据完整性的角度划分,集群健康状态分为三种:

  • Green,所有的主分片和副分片都正常运行。 ·
  • Yellow,所有的主分片都正常运行,但不是所有的副分片都正常运行。这意味着存在单点故障风险。
  • Red,有主分片没能正常运行。
    每个索引也有上述三种状态,假设丢失了一个副分片,该分片所属的索引和整个集群变为Yellow状态,其他索引仍为Green。

1.3.2 可视化界面和图表生成——> K——>安装Kibana

Kibana 是一个旨在与Elasticsearch一起使用的开源分析和可视化平台。

Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让我们在 Elastic Stack中进行导航。
我们可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。

建议Kibana 和Elasticsearch 安装在同一个服务器上。

1.3.2.1 下载并解压Kibana

官方下载地址: https://www.elastic.co/cn/downloads/kibana

  • 下载Kibana
curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-7.12.0-linux-x86_64.tar.gz
  • 解压Kibana
tar xzvf kibana-7.12.0-linux-x86_64.tar.gz
  • 进入Kibana 文件夹
cd kibana-7.12.0-linux-x86_64/

进入Kibana 配置文件目录

cd config

编辑/usr/local/es/kibana-7.12.0-linux-x86_64/config/kibana.yml 文件

vi kibana.yml

编辑内容如下:

# Kibana 默认监听端口5601,如果需要改变就修改这个配置
server.port: 5601
# Kibana 部署服务器IP,如果是单网卡配置0.0.0.0即可,如果是多网卡需要配置IP
server.host: 192.168.159.11
# 配置服务器的名称
server.name: my-kibana
# 配置ES的集群节点地址
elasticsearch.hosts: ["http://192.168.159.11:9200","http://192.168.159.12:9200","http://192.168.159.13:9200"]
# 创建一个kibana索引
kibana.index: ".kibana"
# 配置连接账号和密码
elasticsearch.username: "kibana_system"
elasticsearch.password: "kibana_system"
# Specifies locale to be used for all localizable strings, dates and number formats.
# Supported languages are the following: English - en , by default , Chinese - zh-CN .
#i18n.locale: "en"
i18n.locale: "zh-CN"
  • 启动Kibana
./bin/kibana

如果用root 用户执行,那么需要带上参数:

./bin/kibana --allow-root

如果想后台运行kibana 那么需要带上参数:

nohup ./bin/kibana --alow-root &

1.3.2.2 访问Kibana

启动成功后,打开网址:http://192.168.159.11:5601

输入:elastic 账号和密码

进入如下界面。

1.3.3 数据采集

1.3.3.1 方法一:L——> 使用Logstash 采集日志

Logstash 是一个日志采集框架。

1.3.3.1.1 下载和解压Logstash

Logstash 官方下载地址:https://www.elastic.co/cn/downloads/logstash

1.3.3.1.2 修改配置文件

新建一个配置文件 logstash-simple.conf

vi logstash-simple.conf

编辑内容如下:

logstash-simple.conf配置文件示例:

input {beats {port => 5044}file {path => "/usr/local/nginx/logs/access.log"start_position => "beginning"}
}filter {if [path] =~ "access" {mutate { replace => { "type" => "apache_access" } }grok {match => { "message" => "%{COMBINEDAPACHELOG}" }}}date {match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]}
}output {elasticsearch {hosts => ["192.168.159.11:9200","192.168.159.12:9200","192.168.159.13:9200"]}stdout { codec => rubydebug }
}
  • 以上配置收集 /usr/local/nginx/logs/access.log下的日志
  • Logstash 默认监听5044端口
  • 点击查看更多配置用法
1.3.3.1.3 启动Logstash
./bin/logstash -f ./config/logstash-simple.conf
  • 通过-f 参数可以指定加载哪个配置文件
  • 如果想后台启动则执行如下命令即可:
nohup ./bin/logstash -f ./config/logstash-simple.conf &

1.3.3.1 方法二:F——> 使用FileBeat 采集日志

Filebeat 是 Elastic 公司为解决 Logstash “太重” 的问题推出的一款轻量级日志采集器.

FileBeat 可以监视指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。

趣闻小贴士: logstash 和filebeat 是什么关系?

  • 因为logstash是jvm跑的,资源消耗比较大,所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder。
  • 不过作者只是一个人,加入http://elastic.co公司以后,因为es公司本身还收购了另一个开源项目packetbeat,而这个项目专门就是用golang的,有整个团队,所以es公司干脆把logstash-forwarder的开发工作也合并到同一个golang团队来搞,于是新的项目就叫filebeat了。
    作者:饶琛琳
    链接:https://www.zhihu.com/question/54058964/answer/137882919
    来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

FileBeat 的工作方式:

在处理数量众多的服务器、虚拟机和容器生成的日志时可使用 Logstash + Filebeat 的日志采集方式。

接下来我们将分享如何使用FileBeat 监控并采集日志。

大致分为如下步骤:

  • 在要监视的每个系统上安装Filebeat
  • 指定日志文件的位置
  • 将日志数据解析为字段并将其发送到Elasticsearch
  • 可视化Kibana中的日志数据
1.3.3.1.1 下载和安装FileBeat

在要监视的每个系统上安装Filebeat

说明:

  • 安装的方法有很多种,由于yum安装的版本可能相对较老, 因此这里我们使用通过命令下载安装的方式。
  • 下载FileBeat
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.12.0-linux-x86_64.tar.gz

如果不能使用外网访问也可以选择 点击手动下载FileBeat

  • 解压FileBeat
tar xzvf filebeat-7.12.0-linux-x86_64.tar.gz
1.3.3.1.2 配置Filebeat连接到Elasticsearch 和Kibana
  • 进入文件夹
cd filebeat-7.12.0-linux-x86_64

解压完成后我们可以看到如下的目录结构

filebeat-7.12.0-linux-x86_64
├── data
├── fields.yml
├── filebeat
├── filebeat.reference.yml
├── filebeat.yml
├── kibana
├── LICENSE.txt
├── logs
├── module
├── modules.d
├── NOTICE.txt
└── README.md

目录文件说明

文件名称 描述
data 持久化数据文件
fields.yml 配置文件字段类型定义约束文件
filebeat filebeat执行命令二进制文件
filebeat.reference.yml 和filebeat.yml 文件内容一样, 只是FileBeat 默认配置参考文件,永远不要修改这个文件
filebeat.yml 配置文件
kibana kibana 可视化UI
LICENSE.txt 开源协议证书,不需要修改
logs Filebeat 产生的日志文件
module 模块文件夹
modules.d 模块配置文件, 功能开启的模块都是*.yml命名, 所有的禁用模块都是*yml.disabled命名
NOTICE.txt 版本发布公告文件
README.md 使用说明文件,不需要修改

我们需要修改FileBeat 的配置文件filebeat.yml 以便于连接到Elasticsearch 和Kibana。

  • 编辑filebeat.yml
vi filebeat.yml

编辑filebeat.yml 文件内容如下:

###################### Filebeat Configuration Example #########################
# ============================== Filebeat inputs ===============================filebeat.inputs:# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
- type: log# Change to true to enable this input configuration.enabled: false# Paths that should be crawled and fetched. Glob based paths.paths:- /var/log/*.log- /usr/local/nginx/logs/*.log#- c:\programdata\elasticsearch\logs\*
# filestream is an experimental input. It is going to replace log input in the future.
- type: filestream# Change to true to enable this input configuration.enabled: false# Paths that should be crawled and fetched. Glob based paths.paths:- /var/log/*.log#- c:\programdata\elasticsearch\logs\*
# ============================== Filebeat modules ==============================filebeat.config.modules:# Glob pattern for configuration loadingpath: ${path.config}/modules.d/*.yml# 配置文件自动加载# Set to true to enable config reloadingreload.enabled: true# 每10秒检查一次# Period on which files under path should be checked for changes# reload.period: 10sreload.period: 10s# ======================= Elasticsearch template setting =======================setup.template.settings:index.number_of_shards: 1#index.codec: best_compression#_source.enabled: false
# =================================== Kibana ===================================# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.
setup.kibana:# Kibana Host# Scheme and port can be left out and will be set to the default (http and 5601)# In case you specify and additional path, the scheme is required: http://localhost:5601/path# IPv6 addresses should always be defined as: https://[2001:db8::1]:5601#host: "localhost:5601"host: "192.168.159.11:5601"# Kibana Space ID# ID of the Kibana Space into which the dashboards should be loaded. By default,# the Default Space will be used.#space.id:
# ================================== Outputs ===================================# Configure what output to use when sending the data collected by the beat.# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:# Array of hosts to connect to.#hosts: ["localhost:9200"]hosts: ["192.168.159.11:9200","192.168.159.12:9200","192.168.159.13:9200"]# Protocol - either `http` (default) or `https`.#protocol: "https"protocol: "http"# Authentication credentials - either API key or username/password.#api_key: "id:api_key"#username: "elastic"#password: "changeme"# ------------------------------ Logstash Output -------------------------------
#output.logstash:# The Logstash hosts#hosts: ["192.168.159.11:5044"]#hosts: ["192.168.159.11:5044"]# Optional SSL. By default is off.# List of root certificates for HTTPS server verifications#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]# Certificate for SSL client authentication#ssl.certificate: "/etc/pki/client/cert.pem"# Client Certificate Key#ssl.key: "/etc/pki/client/cert.key"# ================================= Processors =================================
processors:- add_host_metadata:when.not.contains.tags: forwarded- add_cloud_metadata: ~- add_docker_metadata: ~- add_kubernetes_metadata: ~
  • FileBeat 配置主要分为两部分:

    • inputs: 从哪里的数据采集数据
    • output: 数据转发到哪里
  • 默认FileBeat会将日志数据放入到名称为:filebeat-%filebeat版本号%-yyyy.MM.dd 的索引中
  • 更多FileBeat 配置选项见:https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html

1.3.3.1.3 配置Filebeat日志收集实现方式

Filebeat 收集日志有两种实现方式:

  • 方式一:通过启用模块,修改模块中的配置文件方式实现

比如想监控nginx模块,开启nginx模块,然后在模块的模板配置nginx.yml 文件中配置日志路径就行了

强烈建议使用这种方式,这种直接提供了日志配置模板,简单改下路径即可。

  • 方式二: 通过自定义监控文件路径事项

1.3.3.1.3.1 方式一: 启用和配置数据收集模块

Filebeat模块为常见的开源框架提供了日志收集配置模版。

filebeat 默认支持大多数开源框架的日志收集,比如

  • ActiveMQ 日志
  • Apache 日志
  • ES 日志
  • IBM MQ 日志
  • IIS日志
  • Kafka 日志
  • MySQL 日志
  • RabbitMQ 日志
  • Redis 日志
  • Tomcat 日志
  • 如果想查看filebeat 支持的模块配置列表,可以输入如下命令
./filebeat modules list

点击查看支持的全部模块列表配置介绍

  • 在安装目录中,启用一个或多个模块。

例如,输入下面的命令启用 system,nginx和mysql模块配置

./filebeat modules enable system nginx mysql

这样可以收集sytem:(操作系统日志),nginx(nginx日志),mysql(mysql 日志)

执行成功后显示如下所示

如果想禁用某个模块,则输入反向的命令即可

./filebeat modules disable system nginx mysql

执行上面的命令后就会发现./modules.d 文件夹下的nginx.yml.disabled 文件重命名成了ningx.yml

  • 进入modules.d,我们需要修改下模块的配置文件来收集我们指定位置的日志文件。
cd modules.d

比如我们希望采集nginx 的/usr/local/nginx/logs/access.log 日志和 /usr/local/nginx/logs/error.log 日志

那么输入打开 nginx.yml 文件命令如下:

vi nginx.yml

然后编辑nginx.yml 文件内容如下:

# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.x/filebeat-module-nginx.html- module: nginx# Access logsaccess:enabled: true# Set custom paths for the log files. If left empty,# Filebeat will choose the paths depending on your OS.#var.paths:var.paths: ["/usr/local/nginx/logs/access.log"]# Error logserror:enabled: true# Set custom paths for the log files. If left empty,# Filebeat will choose the paths depending on your OS.#var.paths:var.paths: ["/usr/local/nginx/logs/error.log"]# Ingress-nginx controller logs. This is disabled by default. It could be used in Kubernetes environments to parse ingress-nginx logsingress_controller:enabled: false# Set custom paths for the log files. If left empty,# Filebeat will choose the paths depending on your OS.#var.paths:
~

如果nginx.yml 配置文件出错就会报错如下: range can't iterate over /usr/local/nginx/logs/access.log

2021-04-25T16:42:59.347+0800 ERROR   [reload]    cfgfile/list.go:99  Error
creating runner from config: could not create module registry for  filesets: error getting config for fileset nginx/access:
Error interpreting the template of the input: template: text:3:22: executing  "text" at <.paths>:
range can't iterate over  /usr/local/nginx/logs/access.log
1.3.3.1.3.2 方式二: 手动配置Filebeat监控日志文件位置

如果找不到适合文件类型的模块,或者无法更改应用程序的日志输出,可以参考手动配置指定日志收集来源。

要手动配置Filebeat(而不是使用 模块),请在的filebeat.inputs部分中指定输入列表 filebeat.yml

  • 输入指定Filebeat如何查找和处理输入数据
  • 该列表是一个YAML数组,因此每个输入都以破折号(-)开头。您可以指定多个输入,并且可以多次指定相同的输入类型。

filebeat.yml文件添加配置示例如下:

filebeat.inputs:
- type: logenabled: truepaths:- /usr/local/nginx/logs/*.log
  • 本示例中的输入/var/log/*.log将收获路径中的所有文件,这意味着Filebeat将收集/var/log/ 目录中以.log结尾的所有文件
  • 要从预定义级别的子目录中提取所有文件,请使用以下模式: /var/log/*/*.log。这.log将从的子文件夹中提取所有文件 /var/log
  • 它不会从/var/log文件夹本身获取日志文件。当前,不可能以递归方式获取目录所有子目录中的所有文件。
1.3.3.1.4 测试Filebeat配置是否正确

修改完成后我们可以测试下配置是否正确

./filebeat test config -e -c ./filebeat.yml

说明:

  • 如果配置文件不在默认路径下,也可以通过-c 命令指定加载配置文件的路径

执行结果如下所示:

  • 执行成功后可以看到 Config OK
1.3.3.1.5 启动filebeat

如果首次启动需要输入如下命令:

./filebeat setup -e -c ./filebeat.yml

以后启动需要输入如下命令:

./filebeat -e -c ./filebeat.yml
  • -e 是可选的,并将输出发送到标准错误,而不是配置的日志输出。
  • 如果需要后台运行filebeat
nohup ./filebeat -e -c ./filebeat.yml -d "Publish" & > nohup.out

如果想停止filebeat,那么可以输入如下命令

ps aux | grep filebeat

执行成功后会看到如下所示:

其中20976 就是进程PID,结束它就输入杀掉进程命令

kill -9 20976
  • 如果以root用户身份运行Filebeat,就需要更改配置文件的所有权以及modules.d目录中启用的所有配置,
sudo chown root filebeat.yml
sudo chown root modules.d/system.yml
  • 或者使用--strict.perms=false指定的名称运行Filebeat
  • 配置文件的所有权和权限

1.4 查看Kibna 日志结果

完成上述配置后,我们就可以打开我们的Kibana 查看日志数据了。

访问我们的Kibana 服务器:http://192.168.159.11:5601

点击左侧导航的Discover,就可以看到日志结果了,如果没有数据就点击下右上角的过滤,将日志过滤时间范围修改为最近一年。

效果如下所示:

1.5 附录

1.5.1 Elasticsearch 解释

1.5.1.1 Elasticsearch目录结构详解

/usr/local/es/elasticsearch-7.12.0/ 路径下文件夹列表如下所示:

├── bin
├── config
├── data
├── jdk
├── lib
├── LICENSE.txt
├── logs
├── modules
├── NOTICE.txt
├── pid
├── plugins
└── README.asciidoc

类型 描述 默认位置 默认值
home Elasticsearch 主文件夹路径或者$ES_HOME 压缩包解压的文件夹路径
bin 二进制脚本,包含开启一个nodeelasticsearch 和安装插件的elasticsearch-plugin 可执行二进制脚本 $ES_HOME/bin
conf 配置文件包括elasticsearch.yml $ES_HOME/config ES_PATH_CONF
data 节点上分配的每个索引/分片的数据文件的位置。 可以容纳多个位置。 $ES_HOME/data path.data
logs 日志文件路径 $ES_HOME/logs path.logs
plugins 插件文件配置,每个插件会包含在子文件夹下 $ES_HOME/plugins
repo 共享的文件系统存储库位置。 可以容纳多个位置。 可以将文件系统存储库放置在此处指定的任何目录的任何子目录中。 没有配置 path.repo
jdk Elasticsearch是使用Java构建的,所以ES 版本中都自带捆绑了一个Open JDK,位于$ES_HOME/jdk文件夹下 要使用自己的Java版本,请设置ES_JAVA_HOME环境变量,如果必须使用与捆绑的JVM不同的Java版本,则建议使用受支持 的Java LTS版本。如果使用已知的Java错误版本,Elasticsearch将拒绝启动。使用自己的JVM时,捆绑的JVM目录可能会被删除 -

1.5.1.2 Elasticsearch配置文件详解

$ES_HOME/config 文件夹下有这么几个配置文件

├── elasticsearch.keystore
├── elasticsearch.yml
├── jvm.options
├── jvm.options.d
├── log4j2.properties
├── role_mapping.yml
├── roles.yml
├── users
└── users_roles
配置文件名称 配置文件含义
elasticsearch.yml 配置ES
jvm.options 配置ES的JVM参数
log4j2.properties 配置ES的日志

1.5.1.3 nginx 反向代理ES 配置

一般来说我们不直接对外不直接开放端口,而是使用Nginx做反向代理来提供服务。

  • 首先需要在域名解析DNS 那里配置 es.xxx.com 指向我们的服务器
  • 配置Nginx 反向代理

nginx 反向代理ES 配置参考如下:

server {listen 80;server_name es.xxx.com;return 301 https://$host$request_uri;
}server {listen 443 ssl;server_name es.xxx.com;ssl_certificate   cert/server.pem;ssl_certificate_key  cert/server.key;location / {proxy_set_header        Host $host:$server_port;proxy_set_header        X-Real-IP $remote_addr;proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header        X-Forwarded-Proto $scheme;proxy_redirect http:// https://;proxy_pass              http://0.0.0.0:9200;# Required for new HTTP-based CLIproxy_http_version 1.1;proxy_request_buffering off;proxy_buffering off; # Required for HTTP-based CLI to work over SSL# workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651add_header 'X-SSH-Endpoint' 'es.xxxx.com' always;}
}

本篇完~

Centos7 安装ELK/EFK 7.x 集群搭建实战攻略相关推荐

  1. CentOS7安装笔记:minio分布式集群搭建

    文章目录 准备机器 部署(所有机器均执行) 创建挂载磁盘路径 挂载磁盘路径到文件系统 创建minio目录 下载minio安装包 创建启动脚本 创建启动服务 启动测试(所有机器执行) 重新加载服务的配置 ...

  2. Kafka集群搭建实战

    Kafka集群搭建实战 集群结构: 集群环境信息: 192.168.157.130 192.168.157.131 192.168.157.129 Zookeeper集群搭建 三台机器上均安装JDK( ...

  3. centos7 安装haproxy+rabbitmq高可用集群

    一,准备工作: 1,三台centos7虚拟机: 192.168.209.143  rabbitmq-node1+haproxy 192.168.209.147  rabbitmq-node2 192. ...

  4. Centos7安装mariadb galera cluster数据库集群 详解

    #Galera集群特点 集群之间无延时,同步复制.而master-slave主从异步复制,存在延迟. active-active多主,集群内部服务器都是同时写,必须等所有集群内所有数据库都完成数据写入 ...

  5. 最新版Ambari2.75安装及HDP3.1.5集群搭建

    最近打算使用ambari搭建集群,却突然发现Cloudera相关软件包括HDP.CDH都收费了,都需要有效的订阅,并且只能通过付费墙进行访问(官宣地址:关于Cloudera软件的访问获取).还好笔者千 ...

  6. .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7)系列二:k8s高可用集群搭建总结以及部署API到k8s...

    前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...

  7. rancher2.0安装mysql_高可用rancher集群搭建

    我在使用rancher过程中遇到的问题: 一开始是用的单机的环境,没有设置启动内存,而且mysql使用的是内嵌的数据库.Rancher Server在运行了几个月后变的极慢,甚至不能再添加和启动.删除 ...

  8. Zookeeper的安装部署,zookeeper参数配置说明,集群搭建,查看集群状态

    1.Zookeeper的安装部署 7.1 Zookeeper工作机制 7.1.1.Zookeeper集群角色 Zookeeper集群的角色:  Leader 和  follower (Observer ...

  9. 【ManggoDB】安装配置(伪分布式集群搭建)Replia Set

    文章目录 ManggoDB 参考资料 安装配置 配置 MongoDB 复制集(Replica Set)搭建 搭建伪节点 集群测试 注意 配置Debezium的connect 连接器 创建数据库 配置文 ...

最新文章

  1. ASP.NET 完成基于表单的身份验证
  2. oracle 如何边看表中字段信息_【Oracle移行到Sqlserver完美解决案】④sqluldr2+bulk 32H=3H...
  3. 【pyqt5学习】——graphicView显示matplotlib图像
  4. 基于visual Studio2013解决面试题之0902内存拷贝
  5. Java防止用户同一时间重复登录(包括异地登录)
  6. 蓝桥杯2020答案c语言b组,2020十月份蓝桥杯B组省赛题解大全(害!附题面文件和部分代码~)...
  7. 用Python实现简单的人脸识别,10分钟搞定!(附源码)
  8. 一种自适应模拟退火粒子群优化算法-附代码
  9. Inter core i7处理器中(x86架构)驱动开发:关于APCI Hardware ID的描述
  10. 使用express+vue在网页上显示RTSP流视频
  11. Android高级工程师面试实战,赶快收藏备战金九银十!
  12. SQLyog 报错2058 :连接 mysql 8.0.11 解决方法
  13. 蓝牙音箱电路板原理图_一文看懂音响电路图及工作原理
  14. 2022年5月英语口语素材积累
  15. OkHttp面试之--HttpEngine中的readResponse流程简介
  16. 好学6招快速减大象腿
  17. 新一配:IT、TT、TN系统你分清楚了吗?【转载】
  18. Nim游戏的思路及JAVA代码
  19. 馆员工作站的功能与特点
  20. eval与json转换

热门文章

  1. android socketio权限,简要分析socketio-auth
  2. TempData、ViewData和ViewBag的区别
  3. Hexo图片无法加载图片 | The requested content cannot be loaded,Please try again later.
  4. Key Spotting 小总结【关键词搜索】【大部分源于interspeech和ICASSP】
  5. PostgreSQL数据库头胎——后台一等公民进程StartupDataBase StartupXLOG函数进入Recovery模式
  6. Android Launcher3修改应用图标,隐藏应用图标
  7. 无文件攻击与病毒样本分析-1-1-1-无文件攻击介绍
  8. 教你怎么做微信小程序店铺|从开发到运营
  9. node sass卸载_node安装与卸载方法
  10. VSLAM(1):李群和李代数