ELKF日志系统搭建(一)基础——ELKF架构

一、ELKF简介

ElasticSearch:搜索、分析和存储数据
Logstash:采集日志、格式化、过滤数据(数据清洗的过程),最后将数据推送到Elasticsearch存储
Kibana:数据可视化
Beats:集合了多种单一用途数据采集器,用于实现从边缘机器向LogstashElasticsearch发送数据,使用最多的是Filebeat,是一个轻量级日志采集


二、环境准备(三台机器做同样的操作)

环境说明:

准备三台机器:
server            IP           主机名                安装应用
centos7.9    192.168.200.21    elk01    数据、主节点 安装elasticsearch、logstash、kabana、filebeat   
centos7.9    192.168.200.22    elk02    数据、主节点 安装elasticsearch、kabana
centos7.9    192.168.200.23    elk03    数据、主节点 安装elasticsearch、kabana

1、关闭selinux

setenforce 0        #临时关闭SELinux
sed -i  's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  #永久关闭SELnux(重启生效)

 2、修改最大打开文件数

cat /etc/security/limits.conf | grep -v  "^#" | grep -v  "^$"
*                soft    nproc           65536
*                hard    nproc           65536
*                soft    nofile          65536
*                hard    nofile          65536

cat /etc/sysctl.conf | grep -v  "^#"
vm.max_map_count = 655360

# 应用配置
sysctl -p

cat /etc/systemd/system.conf | grep -v  "^#"
[Manager]
DefaultLimitNOFILE=655360
DefaultLimitNPROC=655360

 3、配置hsost文件

cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.21 elk01
192.168.200.22 elk02
192.168.200.23 elk03

4、安装Java环境

查询yum源支持的jdk的rpm包

yum list | grep jdk

安装jdk-11版本

yum install -y java-11-openjdk*

# 查看java版本
[root@elk01 ~]# java -version
openjdk version  "11.0.19" 2023-04-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.19.0.7-1.el7_9) (build 11.0.19+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.19.0.7-1.el7_9) (build 11.0.19+7-LTS, mixed mode, sharing)

三、安装和配置elasticsearch(三台机器都要安装;注意:安装后先启动配置文件中指定的master节点机器,其他节点暂时不要启动,等加入集群后再启动

 1、安装elasticsearch

rpm --import https: //artifacts.elastic.co/GPG-KEY-elasticsearch

[root@elk01 ~]# cat /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository  for 8.x packages
baseurl=https: //artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https: //artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md


yum install --enablerepo=elasticsearch elasticsearch -y

已加载插件:fastestmirror, langpacks
Loading mirror speeds  from cached hostfile
 *  base : mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 elasticsearch.x86_64.0.8.9.0-1 将被 安装
--> 解决依赖关系完成

依赖关系解决

===============================================================================================
 Package                  架构              版本                源                        大小
===============================================================================================
正在安装:
 elasticsearch            x86_64            8.9.0-1             elasticsearch            578 M

事务概要
===============================================================================================
安装  1 软件包

总下载量:578 M
安装大小:1.2 G
Downloading packages:
elasticsearch-8.9.0-x86_64.rpm                                          | 578 MB  01:09:19     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Creating elasticsearch  group ... OK
Creating elasticsearch user... OK
  正在安装    : elasticsearch-8.9.0-1.x86_64                                               1/1 
--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.
TLS  for the transport and HTTP layers  is enabled and configured.

The generated password  for the elastic built- in superuser  is : u9COgfA0okh4LD+fRIRh

If  this node should  join an existing cluster, you can reconfigure  this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token '
after creating an enrollment token  on your existing cluster.

You can complete the following actions at any time:

Reset the password of the elastic built- in superuser with 
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic' .

Generate an enrollment token  for Kibana instances with 
 '/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana' .

Generate an enrollment token  for Elasticsearch nodes with 
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node' .

-------------------------------------------------------------------------------------------------
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service
  验证中      : elasticsearch-8.9.0-1.x86_64                                               1/1 

已安装:
  elasticsearch.x86_64 0:8.9.0-1                                                               

完毕!

 2、配置elasticsearch

[root@elk01 ~]# cat /etc/elasticsearch/elasticsearch.yml | grep -v  "^#"
#集群名称
cluster.name: my-elk
#当前节点在集群中的名称,在集群中,名称唯一
node.name: elk01
#数据存储目录
path.data: / var /lib/elasticsearch
#日志目录
path.logs: / var /log/elasticsearch
#应用监听地址
network.host: 0.0.0.0
#应用监听端口
http.port: 9200
#集群节点列表
discovery.seed_hosts: [ "elk01" ,  "elk02" ,  "elk03" ]
#首次启动指定的Master节点,在Node节点需注释掉
cluster.initial_master_nodes: [ "elk01" ]


xpack.security.enabled:  true

xpack.security.enrollment.enabled:  true

xpack.security.http.ssl:
  enabled:  true
  keystore.path: certs/http.p12

xpack.security.transport.ssl:
  enabled:  true
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12

http.host: 0.0.0.0


#防火墙开放相关端口
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9300/tcp --permanent
firewall-cmd --reload

#启动elasticsearch服务并设为开机自启(注意:3台全部配置好后,先启动配置文件中指定的Master节点这一台,node节点暂时不要启动)
systemctl enable elasticsearch
systemctl start elasticsearch

#安装完 Elasticsearch 时,安装过程会配置 默认情况下为单节点群集。如果想要其他节点加入现有群集 可以在配置的master执行下面的命令在现有节点上生成注册令牌。
[root@server01 ~]# /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node

eyJ2ZXIiOiI4LjkuMSIsImFkciI6WyIxOTIuMTY4LjEwMC4yMTo5MjAwIl0sImZnciI6IjhlZDhmMmY2MjExYWM1YzM5NzdjNzllZDdmODY1MDFiY2E5YjlkNDA4ZTgwNDg0NjRiZDViZWFkNzZiZjRmMjIiLCJrZXkiOiJKX0RERG9vQkRPSVRJM0NlWnNIODpINUFMeHo1eFQ2bU5vcUF1cDNxRk1RIn0=

之后在新的 Elasticsearch 节点上,将注册令牌作为参数传递给工具:elasticsearch-reconfigure-node
[root@server02 ~]# /usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token eyJ2ZXIiOiI4LjkuMSIsImFkciI6WyIxOTIuMTY4LjEwMC4yMTo5MjAwIl0sImZnciI6IjhlZDhmMmY2MjExYWM1YzM5NzdjNzllZDdmODY1MDFiY2E5YjlkNDA4ZTgwNDg0NjRiZDViZWFkNzZiZjRmMjIiLCJrZXkiOiJKX0RERG9vQkRPSVRJM0NlWnNIODpINUFMeHo1eFQ2bU5vcUF1cDNxRk1RIn0=

This node will be reconfigured to  join an existing cluster,  using the enrollment token that you provided.
This operation will overwrite the existing configuration. Specifically: 
  - Security auto configuration will be removed  from elasticsearch.yml
  - The [certs] config directory will be removed
  - Security auto configuration related secure settings will be removed  from the elasticsearch.keystore
Do you want to  continue with the reconfiguration process [y/N]y
如果有多个节点,执行相同的操作,执行完后启动elasticsearch服务

启动后可以使用journalctl -f 查看跟踪日志
[root@server02 ~]# journalctl
-- Logs begin at 日 2023-08-20 00:17:50 CST, end at 日 2023-08-20 03:05:01 CST. --
8月 20 00:17:50 centos7 systemd-journal[107]: Runtime journal  is using 8.0M (max allowed 188.5M
8月 20 00:17:50 centos7 kernel: Initializing cgroup subsys cpuset
8月 20 00:17:50 centos7 kernel: Initializing cgroup subsys cpu
8月 20 00:17:50 centos7 kernel: Initializing cgroup subsys cpuacct
......
......

也可以使用journalctl --unit elasticsearch命令列出elasticsearch的日志条目
[root@server02 ~]# journalctl --unit elasticsearch
-- Logs begin at 日 2023-08-20 00:17:50 CST, end at 日 2023-08-20 03:05:01 CST. --
8月 20 01:14:44 elk02 systemd[1]: Starting Elasticsearch...
8月 20 01:15:30 elk02 systemd[1]: Started Elasticsearch.
8月 20 01:24:29 elk02 systemd[1]: Stopping Elasticsearch...
8月 20 01:24:31 elk02 systemd[1]: Stopped Elasticsearch.

在任意一节点查看集群状态和信息(elastic为账号;086530是密码)
#查询状态
[root@elk01 ~]# curl -kXGET  "https://localhost:9200/_cluster/health?pretty=true" -u elastic:086530

#查询Elasticsearch运行状态
[root@elk01 ~]# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:086530 https: //localhost:9200

#查询集群节点信息
[root@elk01 ~]# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:086530 https: //localhost:9200/_cluster/health?pretty=true

[root@server02 ~]# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:086530 https: //localhost:9200/_cat/nodes

#修改elasticsearch默认密码(在任意一节点修改密码,其他节点也会修改)
[root@elk01 ~]# /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
This tool will reset the password of the [elastic] user.
You will be prompted to enter the password.
Please confirm that you would like to  continue [y/N]y


Enter password  for [elastic]: 
Re-enter password  for [elastic]: 
Password  for the [elastic] user successfully reset.

 四、安装和配置Kibana(三台机器都要安装和配置)

1、安装Kibana

[root@elk8]# cat /etc/yum.repos.d/kibana.repo 
[kibana-8.x]
name=Kibana repository  for 8.x packages
baseurl=https: //artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https: //artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum install -y kibana

2、配置Kibana

#vim /etc/kibana/kibana.yml
server.port: 5601
server.host:  "0.0.0.0"
server.name:  "elk01"
# server.publicBaseUrl 缺失,在生产环境中运行时应配置。某些功能可能运行不正常。
# 这里地址改为你访问kibana的地址,不能以 / 结尾
server.publicBaseUrl:  "http://192.168.200.21:5601"

# Kibana 修改中文
在kibana.yml配置文件中添加一行配置
i18n.locale:  "zh-CN"

# 分别在三台机器上生成kibana加密密钥,并将生成的密钥加入到kibana配置文件中
# xpack.encryptedSavedObjects.encryptionKey: Used to encrypt stored objects such as dashboards and visualizations
# xpack.reporting.encryptionKey: Used to encrypt saved reports
# xpack.security.encryptionKey: Used to encrypt session information
[root@aclab ~]# /usr/share/kibana/bin/kibana-encryption-keys generate
xpack.encryptedSavedObjects.encryptionKey: 5bb5e37c09fd6b05958be5a3edc82cf9
xpack.reporting.encryptionKey: b2b873b52ab8ec55171bd8141095302c
xpack.security.encryptionKey: 30670e386fab78f50b012e25cb284e88

# 防火墙放行5601端口
firewall-cmd --add-port=5601/tcp --permanent
firewall-cmd --reload

# 重启
# 开机启动kibana
systemctl enable kibana
# 启动kibana
systemctl start kibana

# 生成kibana令牌
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZXIiOiI4LjAuMSIsImFkciI6WyIxOTIuMTY4LjIxMC4xOTo5MjAwIl0sImZnciI6IjMzYjUwYTkxN2VmYjIwZjhjYzFjMmM0ZjFhMDdlY2Q2MTliZGUxOTU4MzMyOGY2MTJjMzMyODFjNzI0ODQ5NDYiLCJrZXkiOiJBemgtXzRBQnBtQ3lIN2p4MG1VdDpNN0tiNTFMNlM5NnhwU1lTdGpIOUVRIn0=

# 测试kibana,浏览器访问:
http: //192.168.200.21:5601/

# 在tonken处输入刚刚的令牌
eyJ2ZXIiOiI4LjAuMSIsImFkciI6WyIxOTIuMTY4LjIxMC4xOTo5MjAwIl0sImZnciI6IjMzYjUwYTkxN2VmYjIwZjhjYzFjMmM0ZjFhMDdlY2Q2MTliZGUxOTU4MzMyOGY2MTJjMzMyODFjNzI0ODQ5NDYiLCJrZXkiOiJBemgtXzRBQnBtQ3lIN2p4MG1VdDpNN0tiNTFMNlM5NnhwU1lTdGpIOUVRIn0=

# 在服务器中检索验证码
 sh /usr/share/kibana/bin/kibana-verification-code

# 输入Elasticsearch的用户名密码,进入系统


# 进入kibana后台后可以根据需要修改elastic密码(elasticsearch和kibana的登录密码都会修改)

 注意:elk02和elk03机器上的server.name和server.publicBaseUrl要修改为本机的主机名和ip链接。

 

3、Kibana配置ES监控和管理

(1)、Kibana首次登录进来后,选择自己浏览。

(2)、打开Management,找到“堆栈监测”开启ES集群的监控

(3)、点击打开监控

(4)、稍等一会

(5)、如果上面的界面加载了很久都没跳出页面可以如下图右上角。选择今天的数据时间范围,就有数据了,然后弹出创建规则窗口,按推荐默认的来也可以。

(6)、就可以看到集群的状态 了

 五、安装和配置Logstash(只在elk01上安装Logstash

 1、安装Logstash

#添加yum源
[root@elk01 ~]# cat /etc/yum.repos.d/logstash.repo 
[logstash-8.x]
name=Elastic repository  for 8.x packages
baseurl=https: //artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https: //artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

#安装
yum install -y logstash

 2、配置Logstash

#将ES的证书复制到Logstash目录。因为我们的ES使用的HTTPS访问认证, Logstash要发送日志到ES时,需要进行证书认证。
cp -r /etc/elasticsearch/certs /etc/logstash/

#创建软链接
ln -s /usr/share/logstash/bin/logstash /bin/
ln -s /usr/share/logstash/bin/logstash-plugin /bin/
ln -s /usr/share/logstash/bin/logstash.lib.sh /usr/bin/



#使用Logstash收集日志。进入Logstash目录,创建日志收集的配置文件,因为我的服务器没装有什么应用,就以收集操作系统日志作为例子。
[root@elk01 ~]# cat /etc/logstash/conf.d/systemlog.conf 
input {

    file {

        path => [ "/var/log/messages" ]

        type =>  "system"

        start_position =>  "beginning"

    }

}

output {

     elasticsearch {

            hosts  => [ "https://192.168.200.21:9200" , "https://192.168.200.22:9200" , "https://192.168.200.23:9200" ]

            index  =>  "192.168.200.21-syslog-%{+YYYY.MM}"

            user  =>  "elastic"

            password  =>  "086530qwe"

            ssl =>  "true"

            cacert =>  "/etc/logstash/certs/http_ca.crt"

     }

}

#验证配置文件是否正确,最后面显示OK才能正常启动logstash
[root@elk01 ~]# logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/systemlog.conf --config.test_and_exit

#启动服务
systemctl enable logstash
systemctl start logstash

#防火墙开放相关端口
firewall-cmd --add-port=9600/tcp --permanent
firewall-cmd --reload

# 测试logstash
[root@elk01 ~]# logstash -e  'input { stdin { } } output { stdout {} }'
Using bundled JDK: /usr/share/logstash/jdk
......
......
ipelines=>[:main], :non_running_pipelines=>[]}
#输入内容并按回车
hello word
{
      "@version" =>  "1" ,
       "message" =>  "hello word" ,
          "host" => {
        "hostname" =>  "elk01"
    },
    "@timestamp" => 2023-08-20T16:54:10.531323818Z,
         "event" => {
        "original" =>  "hello word"
    }
}

说明:
在默认情况下,stdout输出插件的编解码器为rubydebug,所以输出内容中包含
有版本、时间等信息,其中message属性包含的就是在命令行输入的内容
@timestamp:标记事件发生的时间点
host:标记事件发生的主机
@version:标记事件的唯一类型

#收集日志。运行日志收集脚本,开始收集日志,并查看日志。
logstash -f /etc/logstash/conf.d/systemlog.conf &

 

 使用Kibana查看日志。打开Kibana页面,点击左侧菜单栏的Discover选项卡,如下图创建数据视图。

如下图复制粘贴索引名称过来,然后保存数据视图,名称可以自己命名。(我这里已经创建了,所以会显示数据视图已存在)

然后就可以查看到日志了,左侧可以做一些日志筛选,右侧可选相应时间段。

以上,就算是整套ELK收集日志的一个简单示范:Logstash收集日志发送到ES,Kibana从ES读取数据进行日志展示和查询。

 六、安装和配置Filebeat收集日志

1、安装Filebeat

#配置yum源
[root@elk01 ~]# cat /etc/yum.repos.d/elastic.repo 
[elastic-8.x]
name=Elastic repository  for 8.x packages
baseurl=https: //artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https: //artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

#安装
yum install -y filebeat

 2、配置Filebeat收集日志

#同Logstash一样,因需要进行证书认证,需要将ES的证书复制到Filebeat目录。
cp -r /etc/elasticsearch/certs /etc/filebeat/

编辑filebeat 的配置文件,编辑filebeat.yml配置文件可以先做个备份,为方便编写,将filebeat.yml原有的内容全部清空,然后写上我们自己的日志收集配置。我这里以日志格式是Json格式的kibana日志作为示范。
[root@elk01 ~]# cat /etc/filebeat/filebeat.yml
filebeat.inputs:

- type: log

  enabled:  true

  paths:

    -  / var /log/kibana/kibana.log

  json.keys_under_root:  true

  json.overwrite_keys:  true

output.elasticsearch:

    hosts: [ "192.168.200.21:9200" , "192.168.200.22:9200" , "192.168.200.23:9200" ]

    index:  "filebeat-kibanalog-%{+yyyy.MM}"

    protocol:  "https"

    username:  "elastic"

    password:  "086530qwe"

    ssl.certificate_authorities:

      - /etc/filebeat/certs/http_ca.crt

setup.template.name:  "filebeat"

setup.template.pattern:  "filebeat-*"

setup.template.enabled:  false

setup.template.overwrite:  true



#启动filebeat收集日志。

因为filebeat收集日志的配置是yml格式的,书写语法比较严格规范,在启动filebeat前,可以先检查一下配置文件的语法有没有问题。

[root@elk01 ~]# filebeat test config -c /etc/filebeat/filebeat.yml
Config OK

#启动服务
systemctl enable filebeat.service 
systemctl start filebeat.service

 同logstash一样,打开Kibana创建数据视图导入索引,查看日志。

 

posted @ 2023-08-10 22:45  我的城市没有海  阅读(421)  评论(0)    收藏  举报