1
头图

环境准备

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

  • 因此我们的服务器最好使用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.

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

Elastic Stack 主要包括三大部分:

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

ELK 不过是Elastic Stack 用法中日志分析栈的一部分

image.png

说明:

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

安装ELK/EFK

服务器IP主机名软件列表
10.0.0.11node-1Elasticsearch、Kibana、Logstash、FileBeat
10.0.0.12node-2Elasticsearch、Logstash、FileBeat
10.0.0.13node-3Elasticsearch、Logstash、FileBeat

安装Elasticsearch

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

下载和解压

  1. ES 的官方下载地址: https://www.elastic.co/cn/dow...
  2. 下载方式二: 使用命令行下载
yum install curl;
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.0-linux-x86_64.tar.gz;
#如果操作系统不支持curl命令也可以使用wget命令下载
yum install wget
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.0-linux-x86_64.tar.gz;
这里使用的版本
elasticsearch-7.16.1-linux-x86_64.tar.gz
filebeat-7.16.1-linux-x86_64.tar.gz
logstash-7.16.2-linux-x86_64.tar.gz
kafka-3.0.0-src.tgz
kibana-7.16.1-linux-x86_64.tar.gz
jdk使用ELK自带的
网盘链接:https://pan.baidu.com/s/1JL_l...
提取码:7777

虚拟机给三台服务器的配置都是
image.png

三台修改操作系统限制

在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]

检查当前操作系统支持单个进程可以打开的最多文件数,返回值如果没修改会显示1024

ulimit -n

要修复bootstrap check failure [1] of [3] 和bootstrap check failure [2] of [3]错误
三台修改配置文件

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...
  • 断开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
reboot

三台都需要操作

#创建es用户
useradd es_user
#修改es用户密码
passwd es_user

image.png

#创建es目录
mkdir -p /elk
cd /elk
#上传安装包到elk目录,这里就统一上传了,具体用到那个软件看上面说明

image.png

#进入elk目录解压文件
cd /elk;
tar -zxvf elasticsearch-7.16.1-linux-x86_64.tar.gz;
tar -zxvf filebeat-7.16.1-linux-x86_64.tar.gz;
tar -zxvf logstash-7.16.2-linux-x86_64.tar.gz;
tar -zxvf kafka-3.0.0-src.tgz;
tar -zxvf kibana-7.16.1-linux-x86_64.tar.gz;

image.png
配置JDK

#进入目录
cd /elk/elasticsearch-7.16.1/bin
#编辑配置文件
vim elasticsearch
#添加环境变量
#配置为elasticsearch自带jdk
export JAVA_HOME=/elk/elasticsearch-7.16.1/jdk
export PATH=$JAVA_HOME/bin:$PATH
#添加jdk判断
if [ -x "$JAVA_HOME/bin/java" ]; then
        JAVA="/elk/elasticsearch-7.16.1/jdk/bin/java"
else
        JAVA=`which java`
fi

image.png

安装elasticsearch

#每个节点创建对应日志数据目录
#node-1
mkdir -p /var/data/es/es-node-1/
mkdir -p /var/log/es/es-node-1/
#node-2
mkdir -p /var/data/es/es-node-2/
mkdir -p /var/log/es/es-node-2/
#node-3
mkdir -p /var/data/es/es-node-3/
mkdir -p /var/log/es/es-node-3/

#进入elasticsearch的config配置目录
cd /elk/elasticsearch-7.16.1/config/;
#修改配置文件
vim elasticsearch.yml;

#node-1配置文件
# 集群名称
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: ["10.0.0.11:9300","10.0.0.12:9300","10.0.0.13:9300"]
# 哪些节点可以被选举为主节点配置
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

#node-2配置文件
# 集群名称
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: ["10.0.0.11:9300","10.0.0.12:9300","10.0.0.13:9300"]
# 哪些节点可以被选举为主节点配置
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

#node-3配置文件
# 集群名称
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: ["10.0.0.11:9300","10.0.0.12:9300","10.0.0.13:9300"]
# 哪些节点可以被选举为主节点配置
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

三台配置文件
image.png
image.png
image.png

  • 如果需要设置远程访问密码,那么需要添加配置如下
http.cors.enabled: true
http.cors.allow-origin: "*" 
http.cors.allow-headers: Authorization
xpack.security.enabled: true 
xpack.security.transport.ssl.enabled: true 

例如
image.png
分别创建目录并给es_user赋予权限

# 分配权限给10.0.0.11
# 授予执行权限
chmod u+x  /elk/elasticsearch-7.16.1/bin
# ES 文件夹权限授权给es_user 用户
mkdir -p /usr/local/es/
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/

# 分配权限给10.0.0.12
# 授予执行权限
chmod u+x  /elk/elasticsearch-7.16.1/bin
# ES 文件夹权限授权给es_user 用户
mkdir -p /usr/local/es/
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/

# 分配权限给10.0.0.13
# 授予执行权限
chmod u+x  /elk/elasticsearch-7.16.1/bin
# ES 文件夹权限授权给es_user 用户
mkdir -p /usr/local/es/
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/

启动Elasticsearch
开发9200,9300端口

firewall-cmd --zone=public --add-port=9200/tcp --permanent;
firewall-cmd --zone=public --add-port=9300/tcp --permanent;
firewall-cmd --reload;
firewall-cmd --list-all;

image.png
CA

cd /elk/elasticsearch-7.16.1
bin/elasticsearch-certutil ca
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
cd /elk/elasticsearch-7.16.1/config
mkdir certs
cp /elk/elasticsearch-7.16.1/elastic-certificates.p12 /elk/elasticsearch-7.16.1/config/certs
chown -R es_user:es_user /elk/*

切换用户登陆

# 切换用户
cd /elk/elasticsearch-7.16.1/
chown -R es_user:es_user /elk/*
su es_user
# 启动ES
./bin/elasticsearch
  • 第一次启动建议前台启动,观测没有错误后再使用后台守护线程启动
  • 前台启动后,如果想退出,可以按键盘Ctrl+C 进行退出
  • 如果需要后台运行的话,那么增加下启动参数即可:./bin/elasticsearch -d -p pid
    注意:
  • 其中-d 表示后台守护进程启动, -p 表示将生成的进程Id存储到文件中。
  • ES 默认启动会加载 $ES_HOME/config/ 文件夹下elasticsearch.yml 中的配置

如本地部署可跳过
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]y


Enter 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 用户设置远程访问密码。

然后当我们再次访问es.xxx.com 就会发现需要提示输入密码
image.png
这里输入 账号 和 刚才设置的密码就可以登陆了。

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

安装Kibana(仅node-1)

Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让我们在 Elastic Stack中进行导航。我们可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。
#进入安装目录
cd /elk/kibana-7.16.1-linux-x86_64;
#进入配置目录
cd config;
#编辑配置文件
vim kibana.yml;
# Kibana 默认监听端口5601,如果需要改变就修改这个配置
server.port: 5601
# Kibana 部署服务器IP,如果是单网卡配置0.0.0.0即可,如果是多网卡需要配置IP
server.host: 10.0.0.11
# 配置服务器的名称
server.name: my-kibana
# 配置ES的集群节点地址
elasticsearch.hosts: ["http://10.0.0.11:9200","http://10.0.0.12:9200","http://10.0.0.13:9200"]
# 创建一个kibana索引
kibana.index: ".kibana"
#启动Kibana
cd /elk/kibana-7.16.1-linux-x86_64/
./bin/kibana
#如果用root 用户执行,那么需要带上参数:
./bin/kibana --allow-root
#如果想后台运行kibana 那么需要带上参数:
nohup ./bin/kibana --alow-root > /dev/null 2> /dev/null &
#非root就授权给es_user
chown -R es_user:es_user /elk/*
cd /elk/kibana-7.16.1-linux-x86_64/
su es_user;
./bin/kibana 
#挂后台启动
nohup ./bin/kibana &

#开启端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent;
firewall-cmd --reload;
firewall-cmd --list-all;

安装Logstash 采集日志

#进入logstash安装目录
cd /elk/logstash-7.16.2/
#新建一个配置文件 logstash-simple.conf
vim 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 => ["10.0.0.11:9200","10.0.0.12:9200","10.0.0.13:9200"]
  }
  stdout { codec => rubydebug }
}
以上配置收集 /usr/local/nginx/logs/access.log下的日志
Logstash 默认监听5044端口
#启动Logstash
cd /elk/logstash-7.16.2/config
su es_user
./elk/logstash-7.16.2/bin/logstash -f ./elk/logstash-7.16.2/config/logstash-simple.conf
  • 通过-f 参数可以指定加载哪个配置文件
  • 如果想后台启动则执行如下命令即可:
nohup ./bin/logstash -f ./config/logstash-simple.conf > /dev/null 2> /dev/null &

安装FileBeat 采集日志

Filebeat 是 Elastic 公司为解决 Logstash “太重” 的问题推出的一款轻量级日志采集器.
FileBeat 可以监视指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。
FileBeat 的工作方式:
image.png
接下来我们将分享如何使用FileBeat 监控并采集日志。
大致分为如下步骤:

  • 在要监视的每个系统上安装Filebeat
  • 指定日志文件的位置
  • 将日志数据解析为字段并将其发送到Elasticsearch
  • 可视化Kibana中的日志数据
cd /elk/filebeat-7.16.1-linux-x86_64/
vim filebeat.yml

image.png

#配置文件
###################### 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 loading
  path: ${path.config}/modules.d/*.yml

  # 配置文件自动加载
  # Set to true to enable config reloading
  reload.enabled: true

  # 每10秒检查一次
  # Period on which files under path should be checked for changes
  # reload.period: 10s
  reload.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: ~

image.png

配置Filebeat日志收集实现方式

  • 方式一:通过启用模块,修改模块中的配置文件方式实现
    比如想监控nginx模块,开启nginx模块,然后在模块的模板配置nginx.yml 文件中配置日志路径就行了
  • 方式二: 通过自定义监控文件路径事项

KentBryce
29 声望1 粉丝

« 上一篇
Docker汇总
下一篇 »
ELK+kafka+filebeat