zoukankan      html  css  js  c++  java
  • ELK日志分析系统部署。

    一、规划

    分为以下2种

    ELK:Logstash作为被控端采集日志存储至elasticsearch,然后kibana调用es数据来展示

    ELK+F:在上面的基础上加一个轻量级的filebeat来作为采集被控端,然后输出日志到Logstash服务端,Logstash在日志存储至elasticsearch,然后kibana调用es数据来展示。

     

     

     

    1、机器说明

    主机名IP备注版本
    elasticsearch-01 192.168.227.93 部署ElasticSearch主节点,环境java1.8 7.0.1
    elasticsearch-02 192.168.227.91 部署ElasticSearch从节点,环境java1.8 7.0.1
    kibana 192.168.227.90 部署kibana分析日志(web页面),环境java1.8 7.0.1
    Logstash 192.168.227.88 采集日志,安装在存有日志的机器上或者安装一台作为服务端来接收filebeat发送的日志,再转发存储至es,环境java1.8 7.0.1

    2、ELK环境准备

    由于Elasticsearch、Logstash、Kibana均不能以root账号运行。 但是Linux对非root账号可并发操作的文件、线程都有限制。 所以,部署ELK相关的机器都要调整:

    • 修改文件限制

    # 修改系统文件
    vi /etc/security/limits.conf

    #增加的内容

    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 2048
    * hard nproc 4096
    • 调整进程数

    #修改系统文件
    vi /etc/security/limits.d/20-nproc.conf

    #调整成以下配置
    *         soft   nproc     4096
    root       soft   nproc     unlimited
    • 调整虚拟内存&最大并发连接

    #修改系统文件
    vi /etc/sysctl.conf

    #增加的内容
    vm.max_map_count=655360
    fs.file-max=655360

     

    • 创建ELK专用用户

    useradd elk
    • 创建ELK相关目录并赋权

    #创建ELK 数据目录
    mkdir /data/elk/
    #创建ELK APP目录
    将解压后的压缩包mv至data/elk

    #更改目录Owner
    chown -R elk:elk /data/elk

    3、ELK组件包下载地址

    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-linux-x86_64.tar.gz

     

    二、Elasticsearch 部署

    本次一共要部署两个Elasticsearch节点,所有文中没有指定机器的操作都表示每个Elasticsearch机器都要执行该操作

    1、准备工作

    • 移动Elasticsearch到统一目录

      root@elasticsearch-01:/data/elk# ls elasticsearch-7.0.1 root@elasticsearch-01:/data/elk#

    • 切换账号

      su - elk
    • 数据&日志目录

    创建Elasticsearch主目录
    mkdir /data/elk/es
    #创建Elasticsearch数据目录
    mkdir /data/elk/es/data
    #创建Elasticsearch日志目录
    mkdir /data/elk/es/logs

    2、Elasticsearch节点配置

    • 修改配置

      #打开目录
      cd /data/elk/elasticsearch-7.0.1/
      #修改配置

      vi config/elasticsearch.yml

       

    • 主节点配置(192.168.227.93)

    cluster.name: my-application
    node.name: node-1
    node.attr.rack: r1
    path.data: /data/elk/es/data
    path.logs: /data/elk/es/logs
    bootstrap.memory_lock: true
    network.host: 192.168.227.93
    http.port: 9200
    discovery.seed_hosts: ["192.168.227.93", "192.168.227.91"]
    cluster.initial_master_nodes: ["node-1"]
    action.destructive_requires_name: true

     

    • 从节点配置(192.168.227.91)

    cluster.name: my-application
    node.name: node-2
    node.attr.rack: r1
    path.data: /data/elk/es/data
    path.logs: /data/elk/es/logs
    network.host: 192.168.227.91
    http.port: 9200
    discovery.seed_hosts: ["192.168.227.93", "192.168.227.91"]
    action.destructive_requires_name: true

     

    • 配置项说明

    说明
    cluster.name 集群名
    node.name 节点名
    path.data 数据保存目录
    path.logs 日志保存目录
    network.host 节点host/ip
    http.port HTTP访问端口
    transport.tcp.port TCP传输端口
    node.master 是否允许作为主节点
    node.data 是否保存数据
    discovery.zen.ping.unicast.hosts 集群中的主节点的初始列表,当节点(主节点或者数据节点)启动时使用这个列表进行探测
    discovery.zen.minimum_master_nodes 主节点个数

     

    3、Elasticsearch启动&健康检查

    • 启动

      #进入elasticsearch根目录
      cd /data/elk/elasticsearch-7.0.1/
      #启动
      ./bin/elasticsearch &

     

    三、Kibana部署

    下载地址:https://artifacts.elastic.co/downloads/kibana/kibana-7.0.1-linux-x86_64.tar.gz

    1、机器准备

    初始化环境,建立用户和安装路径

    hostnamectl set-hotname kibana
    useradd elk
    mkdir /usr/elk
    wget https://artifacts.elastic.co/downloads/kibana/kibana-7.0.1-linux-x86_64.tar.gz
    tar -xf kibana-7.0.1-linux-x86_64.tar.gz -C usr/elk/ ##解压包至elk目录
    chown -R elk:elk /usr/elk

     

    2、修改kibana配置文件

    elk@kibana:/usr/elk$ cat /usr/elk/kibana-7.0.1/config/kibana.yml| grep -Ev '^$|#'

    i18n.locale: "zh-CN" ###设置为中文
    server.port: 5601     ##监听端口
    server.host: "192.168.227.90"    
    elasticsearch.hosts: "http://192.168.227.93:9200"   ##es主机

     

    3、启动kibana

    su elk

    ./usr/elk/kibana-7.0.1/bin/kibana & 启动kibana后台运行

    已经启动

    image-20210708112044620

     

     

    四、Logstash对接es

     

    1、机器准备

    注意:这里是在需要对接日志的机器安装,此处不安装在192.168.227.88机器上,这台机器给第八步骤使用!

    在需要对接日志的机器上安装logstash,然后对接elasticsearch主机。

    logstash下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.tar.gz

    以下是脚本,快速创建修改目录以及安装logstash



    appdeploy@CDT-SIT-APP-03:~$ cat logstash_install.sh
    #!/bin/bash

    #创建elk用户
    useradd elk

    #创建相关目录
    mkdir /usr/elk
    mkdir -p /data/elk/logstash/data
    mkdir -p /data/elk/logstash/logs

    #安装logstash
    tar -xf logstash-7.0.1.tar.gz
    mv logstash-7.0.1 /usr/elk/logstash-7.0.1

    echo "path.data: /data/elk/logstash/data" >> /usr/elk/logstash-7.0.1/config/logstash.yml
    echo "path.data: /data/elk/logstash/logs" >> /usr/elk/logstash-7.0.1/config/logstash.yml

    chown -R elk:elk /data/elk
    chown -R elk:elk /usr/elk

     

    2、建立conf文件

     

    首先,logstash agent按配置好的规则从每台服务器上收集log,收集好后发送给elasticsearch,elasticsearch再创建索引并存储,最后再通过kibana结合es从web界面进行查询和展示。

    了解流程后,需要了解logstash是怎么从日志里收集数据的。这里,就需要建立conf文件了。如下:

     

    root@CDT-SIT-APP-03:/usr/elk/logstash-7.0.1/config# cat input-output.conf

    input {
    file{
    path => ["/data/logs/cec-evcs-data-service-9267.log"]

    start_position => beginning

    codec=>plain

    discover_interval=>30

    }

    }

    output {
        stdout { codec => plain }

        elasticsearch {
            hosts => "192.168.227.93:9200"

            index => "cec_evcs_data_service_9267-%{+YYYY.MM.dd}"
          ## 日志背后以年月日结尾作为日志切割,方便后期的日志清理。

    }

    }

     

    3、执行启动Logstash

     

    su elk

    /usr/elk/logstash-7.0.1/bin/logstash -f /usr/elk/logstash-7.0.1/config/input-output.conf --config.reload.automatic >/dev/null &

     

    五、kibana页面

     

    1、查看节点信息

    点击左侧列表:堆栈监测

    image-20210708154112239

     

    选择节点:

    以下为节点信息。

    image-20210708154218199

     

    2、创建索引

    点击左侧列表:管理

     

    image-20210708154311788

     

     

    创建索引模式即可,如下图

    索引模式为:cec_evcs_data_service_9267*

    image-20210708173124734

     

    创建索引,以时间筛选字段。

     

    image-20210708173155801

     

     

    3、查看日志分析

     

    image-20210708173244387

     

    六、ELK定时删除日志

    以下这个地址是主es的日志存储展示,自行更换ip哈。因为是主从结构,所以删除主es的即会同步删除从es的日志。

    http://192.168.227.91:9200/_cat/indices?v

    image-20210708174329252

     

    1、执行脚本删除

     

    将以下脚本放至主es的/data/elk/clear_log_script目录下,

    脚本说明:前提是日志以日期切片保存,然后筛选多少天前的日志出来保存至指定文本,for循环执行删除日志。删除主es的即可。

    cat /data/elk/clear_log_script/clear_log.sh

      #!/bin/bash
      #删除ELK10天前的日志,自己看情况改。
       
      DATE=`date -d "10 days ago" +%Y.%m.%d`
       
      curl -s -XGET http://127.0.0.1:9200/_cat/indices?v| grep $DATE | awk -F '[ ]+' '{print $3}' >/data/elk/clear_log_script/elk.log
       
      for elk in `cat /data/elk/clear_log_script/elk.log`
       
      do
       
      curl -XDELETE "http://192.168.227.93:9200/$elk"
       
      done

     

    加入到定时任务

    # crontab -e

    #每天凌晨1点定时清理elk索引`

    00 01 * * * bash /data/elk/clear_log_script/clear_log.sh &>/dev/null

    注意:保证crond服务是启动的

     

    2、kibana页面删除es存储索引

     这还要我写?自己页面点点就好了。

     3、单台ES情况下没有分片,

    3、kibana页面显示索引YELLOW

    所有的日志会现实黄色警告,yellow,下面这个脚本是将其改为绿色,需要定期执行

     

    root@CDT-UAT-LOG:/data/# cat /data/elk/green.sh 
    #!/bin/bash
    curl -H "Content-Type: application/json" -XPUT 'http://localhost:9200/_settings' -d '
    {
         "index" : {
            "number_of_replicas" : 0
         }
     }'

     

     

    七、ELK在linux后台启动命令

    1、filebeat启动

    后台启动生成日志文件

    进入file-..*目录下 nohup ./filebeat -e -c filebeat.yml -d "Publish" & > nohup.out

    后台启动不生成日志

    ./filebeat -e -c filebeat.yml -d "Publish" >/dev/null 2>&1 &

    关键在于最后的 >/dev/null 2>&1 部分,/dev/null是一个虚拟的空设备(类似物理中的黑洞),任何输出信息被重定向到该设备后,将会石沉大海 /dev/null 表示将标准输出信息重定向到"黑洞" 2>&1 表示将标准错误重定向到标准输出(由于标准输出已经定向到“黑洞”了,即:标准输出此时也是"黑洞",再将标准错误输出定向到标准输出,相当于错误输出也被定向至“黑洞”)

    2、logstash 启动

    后台启动生成日志文件

    进入logstash-..*目录下 我这里为了方便把logstash-sample.conf 文件放在了bin目录下 nohup ./bin/logstash -f bin/logstash-sample.conf & > nohup.out

    后台启动不生成日志

    ./bin/logstash -f bin/logstash-sample.conf >/dev/null 2>&1 &

    3、启动elasticsearch

    后台启动生成日志

    进入elastic-..*/bin 目录下 nohup ./elasticsearch & > nohup.out

    后台启动不生成日志

    ./elasticsearch >/dev/null 2>&1 &

     

    八、ELK+filebeat

     

    参考文件:https://blog.csdn.net/wsdc0521/article/details/106308441/

     

    以上已经实现了logstash采集日志存储至ES,然后kibana展示。为避免logstash作为日志采集器客户端占用资源过大,在原有基础上增加一个filebeat。即设置机器作为Logstash的服务端。其他存有日志的机器上安装轻量级的filebeat作为日志采集器(安装包才十几M)。

    部署Logstash服务端

    1、部署Logstash服务端

    注意:此处安装在192.168.227.88机器上作为服务端接收filebeat

    在需要对接日志的机器上安装logstash,然后对接elasticsearch主机。

    logstash下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.tar.gz

    以下是脚本,快速创建修改目录以及安装logstash


    appdeploy@CDT-SIT-APP-03:~$ cat logstash_install.sh
    #!/bin/bash

    #创建elk用户
    useradd elk

    #创建相关目录
    mkdir /usr/elk
    mkdir -p /data/elk/logstash/data
    mkdir -p /data/elk/logstash/logs

    #安装logstash
    tar -xf logstash-7.0.1.tar.gz
    mv logstash-7.0.1 /usr/elk/logstash-7.0.1

    echo "path.data: /data/elk/logstash/data" >> /usr/elk/logstash-7.0.1/config/logstash.yml
    echo "path.data: /data/elk/logstash/logs" >> /usr/elk/logstash-7.0.1/config/logstash.yml

    chown -R elk:elk /data/elk
    chown -R elk:elk /usr/elk

     

    2、建立conf文件

     

    首先,logstash服务端按配置好的规则从每台filebeat服务器上接收log,收集好后发送给elasticsearch,elasticsearch再创建索引并存储,最后再通过kibana结合es从web界面进行查询和展示。

    了解流程后,需要了解logstash是怎么从filebeat收集数据的。这里,就需要建立conf文件了。如下:

    以下是采集多个日志分别推送至es创建索引,有nginx和java得日志,通过if语句判断存储至指定索引。

     ​

    root@logstash:/usr/elk/logstash-7.0.1/config# vi logstash.conf 
    ​
    input {
    beats {
    
    port => 5044
    
    
    }
    
    }
    
    output {
    if [tags][0] == "charge-service-9266"{
    elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "cec-evcs-charge-service-9266-%{+YYYY.MM.dd}"
    }
    }
    if [tags][0] == "data-service-9267"{
    elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "cec-evcs-data-service-9267-%{+YYYY.MM.dd}"
    }
    }
    if [tags][0] == "data-service-msg"{
    elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "cec-evcs-data-service-msg-%{+YYYY.MM.dd}"
    }
    }
    if [tags][0] == "chargemgmtapp-9216-error"{
    elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "cdt-chargemgmtapp-9216-error-%{+YYYY.MM.dd}"
    }
    }
    if [tags][0] == "saas-pay-data-service-info"{
    elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "saas-pay-data-service-info-%{+YYYY.MM.dd}"
    }
    }
    if [tags][0] == "saas-pay-data-service-error"{
    elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "saas-pay-data-service-error-%{+YYYY.MM.dd}"
    }
    }
    if [tags][0] == "saas-pay-platform-service-info"{
    elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "saas-pay-platform-service-info-%{+YYYY.MM.dd}"
    }
    }
    if [tags][0] == "saas-pay-platform-service-error"{
    elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "saas-pay-platform-service-error-%{+YYYY.MM.dd}"
    }
    }
    }
     

     

    3、执行启动Logstash

     

    su elk

    /usr/elk/logstash-7.0.1/bin/logstash -f /usr/elk/logstash-7.0.1/config/input-output.conf --config.reload.automatic >/dev/null &

     

     

    被控端部署filebeat

     

    安装包连接:wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.0.1-linux-x86_64.tar.gz

    1、准备filebeat客户端采集日志

    useradd elk

    #创建相关目录
    mkdir /usr/elk
    mkdir -p /data/elk/
    mkdir -p /data/elk/

    #安装filebeat
    tar -xf filebeat-7.0.1.tar.gz
    mv logstash-7.0.1 /usr/elk/logstash-7.0.1


    chown -R elk:elk /data/elk
    chown -R elk:elk /usr/elk

     

    2、修改conf文件

    这台机器接入java日志

    appdeploy@CDT-SIT-APP-03:/usr/elk/filebeat-7.0.1$ cat filebeat_min.yml 
    filebeat.inputs:
    - type: log
    enabled: true
    paths:
      - /data/logs/cec-evcs-data-service-msg.log
    tags: ["service-msg"]
    filebeat.config.modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false
    setup.template.settings:
    index.number_of_shards: 1
    setup.kibana:
    output.logstash:
    hosts: ["192.168.227.88:5044"]
    processors:
    - add_host_metadata: ~
    - add_cloud_metadata: ~

     

    这台机器接入nginx日志

    root@CDT-PT-NGINX-02:/home/appdeploy# cat /usr/elk/filebeat-7.0.1/filebeat2.yml
    filebeat.inputs:
    - type: log
    enabled: true
    paths:
      - /data/test2.log
    tags: ["test_nginx"]
    filebeat.config.modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false
    setup.template.settings:
    index.number_of_shards: 1
    setup.kibana:
    output.logstash:
    hosts: ["192.168.227.88:5044"]
    processors:
    - add_host_metadata: ~
    - add_cloud_metadata: ~

     

     

    3、启动filebeat

     

    nohup /usr/elk/filebeat-7.0.1/filebeat -e -c /usr/elk/filebeat-7.0.1/filebeat.yml >/dev/null 2>&1 &

     

     

    专业从事搬砖多年,还是在继续搬砖中,厚积薄发~
  • 相关阅读:
    junit源码解析--测试驱动运行阶段
    junit源码解析--初始化阶段
    junit源码解析--核心类
    junit测试套件
    junit参数化测试
    junit忽略测试方法
    Junit4常用注解
    泛型技术
    在使用Java8并行流时的问题分析
    Linux 常用性能分析命令
  • 原文地址:https://www.cnblogs.com/Crazy-Liu/p/15003631.html
Copyright © 2011-2022 走看看