• centos7搭建EFK日志收集系统


    EFK简介

    说起ELK相信大部分人都很熟悉,这是一个日志收集系统,可以收集咱们需要日志的关键信息,并且通过web界面的形式展示出来,ELK一般只是用来收集服务的日志信息,那么在云原生趋势下很火的kubernetes和docker,想必大家都很关心一个问题docker容器的又该怎么搜集处理呢?这个问题的答案就是我们今天的主角EFK要做的事了。

    为什么要用EFK而不用ELK收集容器的日志信息呢?
    本人才疏学浅,下面说的为了抛砖引玉,有说的不对的还请指正,有不同的看法也欢迎评论留言
    首先说一下ELK是由三个开源项目组成他们分别是:

    • E: Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据功能
    • L: Logstash是用来搜集、分析、过滤日志的工具
    • K: Kibana是一个基于web图形化界面,用于搜索、分析和可视化存储在Elasticsearch指标中的日志数据

    EFK由三个开源项目组成分别是:
    E:Elasticsearch
    F:Filebeat
    K:Kibana
    这里说一下Filebeat的功能,是用来搜集文件数据的收集器,但是不像Logstash一样,不会对搜集的日志文件进行分析、处理等操作。

    说一下Filebeat的优势吧!
    Filebeat的性能稳定,占用系统资源少,相较于Logstash来说,安装使用简单。Logstash是基于内存来进行存储的,如果出现服务异常等,情况的话那么数据就会丢失Filebeat是基于硬盘存储的

    EFK部署

    注意:内存需要给到4G不然会报错

    环境说明:
    系统centos7.9
    IP地址:192.168.182.132

    软件版本
    Elasticsearch8.4.1
    Filebeat8.4.1
    Kibana8.4.1

    EFK下载地址

    Elasticsearch部署

    jdk下载地址

    // 修改主机名,做域名解析
    [root@localhost ~]# hostnamectl set-hostname efk
    [root@localhost ~]# bash
    [root@efk ~]# tail -1 /etc/hosts
    192.168.182.132 efk
    
    • 1
    • 2
    • 3
    • 4
    • 5
    // 下载Elasticsearch
    [root@localhost ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.4.1-linux-x86_64.tar.gz -P /opt/
    
    因为es需要依赖jdk所以咱们需要安装jdk
    [root@efk opt]# rpm -ivh jdk-18_linux-x64_bin.rpm
    
    • 1
    • 2
    • 3
    • 4
    • 5
    // 解压tar包
    [root@localhost opt]# tar -zxf elasticsearch-8.4.1-linux-x86_64.tar.gz -C /usr/local/
    
    • 1
    • 2
    // 做软链接
    [root@efk local]# ln -s elasticsearch-8.4.1/ elasticsearch
    
    • 1
    • 2
    // 配置环境变量
    [root@efk bin]# cat /etc/profile.d/es.sh
    export PATH=/usr/local/elasticsearch/bin:$PATH
    
    [root@efk bin]# source /etc/profile.d/es.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    // 创建用户并设置密码,因为Elasticsearch不能使用root来管理
    [root@efk ~]# useradd es
    [root@efk ~]# passwd es
    
    [root@efk local]# chown -R es.es elasticsearch-8.4.1/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    //创建elasticsearch的数据目录和日志目录
    [root@efk ~]# mkdir -p /var/data/elasticsearch
    [root@efk ~]# mkdir -p /var/log/elasticsearch
    [root@efk data]# chown -R es.es elasticsearch/
    [root@efk log]# chown -R es.es elasticsearch/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    // 修改elasticsearch的配置文件
    17  cluster.name: my-es  //取消注释,集群名称,可根据需要进行修改
    33  path.data: /var/data/elasticsearch  //elasticsearch数据目录存放位置,建议创建此目录(官网推荐)
    37  path.logs: /var/log/elasticsearch  //elasticsearch日志文件存放位置
    56  network.host: 192.168.182.132  //取消注释,这里是监听地址
    61  http.port: 9200  //取消注释,这里是监听的端口号
    70  discovery.seed_hosts: ["efk"]  //取消注释,指定要发现的节点,可以写节点名也可写IP地址,因为我们这里是单节点所以写当前节点名就可以了
    98  xpack.security.enabled: true
    100  xpack.security.enrollment.enabled: true
    103  xpack.security.http.ssl:
    108  xpack.security.transport.ssl:
    115  cluster.initial_master_nodes: ["efk"]
    119  http.host: 0.0.0.0
    以上的这个几行行要注意缩进不然启动服务会报错
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    // 使用systemd来管理elasticsearch
    [root@efk config]# tail -7 /etc/security/limits.conf | grep -iv end
    * hard nofile 131072
    * soft nproc 4096  
    * hard nproc 4096
    es hard nofile 65536
    es soft nofile 65536
    
    [root@efk ~]# tail -3 /etc/sysctl.conf 
    vm.max_map_count=655360
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    
    [root@efk ~]# sysctl -p
    vm.max_map_count = 655360
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    [root@efk config]# cat /usr/lib/systemd/system/es.service
    [Unit]
    Description=es server daemon
    After=network.target sshd-keygen.service
    
    [Service]
    Type=simple
    LimitNOFILE=100000
    LimitNPROC=100000
    ExecStart=/usr/local/elasticsearch/bin/elasticsearch 
    ExecReload=/bin/kill -HUP $MAINPID
    Restart=no
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    [root@efk config]# systemctl daemon-reload
    [root@efk config]# systemctl enable --now es.service
    [root@efk config]# systemctl list-unit-files --type=service | grep -w es
    es.service                                    enabled
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    // 设置elasticsearch的用户名和密码,因为我们上面开启了ssl
    执行设置用户名和密码的命令,需要设置密码的用户有elastic、apm_system、kibana_system、logstash_system、beats_system、remote_monitoring_user
    [es@efk elasticsearch]$ elasticsearch-setup-passwords interactive
    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]: 
    passwords must be at least [6] characters long
    Try again.
    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]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • elastic用户拥有superuser角色,是内置的超级用户
    • kibana用户:拥有kibana_system角色,用户kibana用来连接elasticsearch并与之通信。Kibana服务器以该用户身份提交请求以访问集群监视API和Kibana索引。不能访问index
    • logstash_system用户:拥有logstash_system角色,用户Logstash在Elasticsearch中存储监控信息时使用。

    // 修改密码

    curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }'
    
    • 1

    // 带密码查询

    Elasticsearch设置用户名密码之后,不能再直接使用Elasticsearch head 访问,可以在查询等API上加上用户等参数
    curl -XGET --user user:passwd 'http://XXXX:9200/XX/XXX'
    
    • 1
    • 2

    浏览器IP:9200
    用户名为elastic,密码为刚才设置的密码,我这里我密码为123456

    部署kibana

    // 下载Kibana
    [root@localhost ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-8.4.1-linux-x86_64.tar.gz -P /opt/
    
    • 1
    • 2
    // 解压tar包
    [root@efk opt]# tar -zxf kibana-8.4.1-linux-x86_64.tar.gz -C /usr/local/
    
    • 1
    • 2
    // 做软链接
    [root@efk local]# ln -s kibana-8.4.1/ kibana
    [root@efk local]# chown -R kibana.kibana kibana-8.4.1/
    [root@efk ~]# useradd kibana
    [root@efk ~]# passwd kibana
    
    • 1
    • 2
    • 3
    • 4
    • 5
    // 配置环境变量
    [root@efk ~]# cat /etc/profile.d/kibana.sh 
    export PATH=/usr/local/kibana/bin:$PATH
    [root@efk ~]# source /etc/profile.d/kibana.sh
    
    • 1
    • 2
    • 3
    • 4
    // 创建相应文件,并修改属主和属组
    [root@efk ~]# mkdir -p /var/log/kibana/
    [root@efk ~]# touch /var/log/kibana/kibana.log
    [root@efk ~]# chown -R kibana.kibana /var/log/kibana/kibana.log
    
    [root@efk ~]# mkdir -p /run/kibana/
    [root@efk ~]# touch /run/kibana/kibana.pid
    [root@efk ~]# chown -R kibana.kibana /run/kibana/kibana.pid
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    // 修改kibana配置文件,修改配置文件之前建议先备份
    [root@efk config]# cp kibana.yml kibana.yml-bak
    [root@efk config]# vim kibana.yml
     server.port: 5601  //kibana监听的端口号
     server.host: "192.168.182.132"  //默认为localhost,后端服务器的主机地址
     elasticsearch.hosts: ["http://localhost:9200"]  //与es连接,es的IP+端口号
     elasticsearch.username: "kibana_system"  //kibana_system用户和密码
     elasticsearch.password: "kibana"
     pid.file: /run/kibana/kibana.pid  //kibana的pid文件路径
      i18n.locale: "zh-CN"  //语言中文
    logging:
      appenders:
        file:
          type: file
          fileName: /var/log/kibana/kibana.log
          layout:
            type: json
      root:
        appenders:
          - default
          - file
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    // 使用systemd控制kibana
    [root@efk ~]# cat /usr/lib/systemd/system/kibana.service
    [Unit]
    Description=kibana server daemon
    After=network.target sshd-keygen.service
    
    [Service]
    Type=simple
    ExecStart=/usr/local/kibana/bin/kibana
    ExecReload=/bin/kill -HUP $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    [root@efk ~]# systemctl daemon-reload
    [root@efk ~]# systemctl enable --now kibana.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    // 浏览器访问IP:5601

    // 获取令牌
    [root@efk bin]# elasticsearch-create-enrollment-token --scope kibana
    
    • 1
    • 2


    // 获取验证码

    // 获取验证码命令
    [root@efk bin]# kibana-verification-code
    
    • 1
    • 2


    // 先选择自己浏览

    部署filebeat

    // 下载Filebeat
    [root@localhost ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.4.1-linux-x86_64.tar.gz -P /opt
    
    • 1
    • 2
    // 解压filebeat
    [root@efk opt]# tar -zxf filebeat-8.4.1-linux-x86_64.tar.gz -C /usr/local/
    
    • 1
    • 2
    // 创建软链接
    [root@efk local]# ln -s filebeat-8.4.1-linux-x86_64/ filebeat
    
    • 1
    • 2
    //配置环境变量
    [root@efk ~]# cat /etc/profile.d/filebeat.sh
    export PATH=/usr/local/filebeat/filebeat:$PATH
    [root@efk ~]# source /etc/profile.d/filebeat.sh
    
    • 1
    • 2
    • 3
    • 4
    // 使用systemd控制filebeat
    [root@efk ~]# cat /usr/lib/systemd/system/filebeat.service
    [Unit]
    Description=filebeat server daemon
    After=network.target sshd-keygen.service
    
    [Service]
    Type=simple
    ExecStart=/usr/local/filebeat/filebeat -c /usr/local/filebeat/fields.yml
    ExecReload=/bin/kill -HUP $MAINPID
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
    [root@efk ~]# systemctl daemon-reload
    [root@efk ~]# systemctl enable --now filebeat.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    数据仓库(6)数仓分层设计
    六、循环表达式
    [附源码]计算机毕业设计springboot学生宿舍管理系统
    C++机票购买系统
    3D建模基础教程:编辑多边形功能命令快捷方式
    Java 设计模式——外观模式
    045天 集合框架09 总结点 问
    【Linux 驱动基础】驱动程序基石
    NRF52840-QIAA-R Nordic BLE5.0蓝牙无线收发芯片
    【数据结构入门_数组】 Leetcode 350. 两个数组的交集 II
  • 原文地址:https://blog.csdn.net/qq_60387497/article/details/126674667