美文网首页
ELFK搭建

ELFK搭建

作者: 阿当运维 | 来源:发表于2023-03-21 15:10 被阅读0次

    架构规划

    主机名 IP 角色
    k8s-01 192.168.2.112 logstash-01,filebeat
    k8s-02 192.168.2.113 logstash-02,filebeat
    k8s-03 192.168.2.114 es-01
    k8s-04 192.168.2.115 es-02
    k8s-05 192.168.2.116 es-03,kibana

    包准备:

    • elasticsearch-6.8.6.tar.gz
    • filebeat-7.5.0-linux-x86_64.tar.gz
    • kafka_2.12-3.4.0.tgz
    • kibana-6.8.6-linux-x86_64.tar.gz
    • logstash-6.8.6.zip

    环境准备:

    1. 环境需要jdk1.8支持

    a)解压jdk.tar.gz tar zxvf jdk-8u144-linux-x64.tar.gz -C /opt/

    b)vim /etc/profile 最后加入

    export JAVA_HOME=/opt/jdk1.8.0_144
    
    PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
    
    export PATH
    

    source /etc/profile && java -version

    2. 系统参数优化

    a) 编辑/etc/security/limits.conf 新增:

    * soft nofile 65535
    * hard nofile 131072
    * soft nproc 2048
    * hard nproc 4096
    

    b) 编辑/etc/sysctl.conf 加入vm.max_map_count=655360

    实施过程:

    一.搭建ES集群

    1.1)解压es包 -创建es专属用户-创建es数据相关目录-修改属主属组

    解压略
    mv elasticsearch-6.8.6/ elasticsearch
    mkdir -p /opt/es/data log
    useradd  elasticsearch
    chown -R elasticsearch.elasticsearch elasticsearch
    chown -R elasticsearch.elasticsearch /opt/data/es
    

    注意: 测试环境机器配置很低 ,所以修改一下config/jvm.options 将默认数值改成-Xms256m -Xmx256m

    1.2) 编辑es配置文件elasticsearch.yml

    cluster.name: es-cluster-ty
    node.name: node-1
    node.master: true
    node.data: true
    path.data: /opt/data/es/data/
    path.logs: /opt/data/es/log/
    network.host: 192.168.2.114
    http.port: 9200
    transport.tcp.port: 9300
    discovery.zen.ping.unicast.hosts: ["192.168.2.114:9300", "192.168.2.115:9300", "192.168.2.116:9300"]
    discovery.zen.minimum_master_nodes: 2
    

    1.3) 编辑es-服务文件/lib/systemd/system/elasticsearch.service

    [Unit]                                                       
    Description=Elasticsearch fot ty                      
    Documentation=http://www.elastic.co                            
    Wants=network-online.target                                   
    After=network-online.target                                        
                                  
    [Service]            
    RuntimeDirectory=elasticsearch
    PrivateTmp=true                                                                  
    Environment=ES_HOME=/opt/elasticsearch
    Environment=ES_PATH_CONF=/opt/elasticsearch/config
    Environment=PID_DIR=/opt/elasticsearch 
    EnvironmentFile=-/etc/default/elasticsearch
                                              
    WorkingDirectory=/opt/elasticsearch
    User=elasticsearch
    Group=elasticsearch
    ExecStart=/opt/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet
    StandardOutput=journal
    StandardError=inherit
    LimitNOFILE=65536
    LimitNPROC=4096
    LimitAS=infinity
    LimitFSIZE=infinity
    TimeoutStopSec=0
    KillSignal=SIGTERM
    KillMode=process
    SendSIGKILL=no
    SuccessExitStatus=143
    [Install]
    WantedBy=multi-user.target
    
    

    1.4) 开启服务 并开启自启动

    systemctl enable elasticsearch.service 
    systemctl start  elasticsearch.service 
    

    1.5) 集群测试

    # curl -i -XGET http://127.0.0.1:9200/_cluster/health?pretty
    
    HTTP/1.1 200 OK
    content-type: application/json; charset=UTF-8
    content-length: 466
    
    {
      "cluster_name" : "es-cluster-ty",
      "status" : "green",
      "timed_out" : false,
      "number_of_nodes" : 3,
      "number_of_data_nodes" : 3,
      "active_primary_shards" : 0,
      "active_shards" : 0,
      "relocating_shards" : 0,
      "initializing_shards" : 0,
      "unassigned_shards" : 0,
      "delayed_unassigned_shards" : 0,
      "number_of_pending_tasks" : 0,
      "number_of_in_flight_fetch" : 0,
      "task_max_waiting_in_queue_millis" : 0,
      "active_shards_percent_as_number" : 100.0
    }
    

    ————————————————————————————————————————————————————

    二.搭建Logstash

    1.1)解压程序

    unzip logstash-6.8.6.zip
    mv logstash-6.8.6 logstash
    

    1.2)修改启动配置 /opt/logstash/config/startup.options为如下内容(路径按需修改):

    JAVACMD=/opt/jdk1.8.0_144/bin/java
    JAVA_HOME=/opt/jdk1.8.0_144
    LS_HOME=/opt/logstash
    LS_SETTINGS_DIR=/opt/logstash/config
    LS_CONFIG_FILE=/opt/logstash/config/logstash.conf
    LS_OPTS="--path.settings ${LS_SETTINGS_DIR} --path.config ${LS_CONFIG_FILE}"
    LS_JAVA_OPTS=""
    LS_PIDFILE=/var/run/logstash.pid
    LS_USER=logstash
    LS_GROUP=logstash
    LS_GC_LOG_FILE=/opt/logstash/logs/gc.log
    LS_OPEN_FILES=16384
    LS_NICE=19
    SERVICE_NAME="logstash"
    SERVICE_DESCRIPTION="logstash"
    
    • 字段解读:
    JAVACMD:java程序的路径。
    ===============================================================
    JAVA_HOME: 单独的 JAVACMD 变量有时不能生效,添加 JAVA_HOME 备用。这里配置成你的JDK路径
    ===============================================================
    LS_HOME: logstash 的安装目录
    ===============================================================
    LS_SETTINGS_DIR: logstash 的配置文件目录,这个目录中要包含 logstash.yml
    ===============================================================
    LS_CONFIG_FILE: 指定 logstash.conf 配置文件
    ===============================================================
    LS_OPTS: 在运行 logstash 时添加的参数。这里配置成: "--path.settings ${LS_SETTINGS_DIR} --path.config 
    ${LS_CONFIG_FILE}"
    ===============================================================
    LS_GC_LOG_FILE: gc 日志路径
    ===============================================================
    

    1.3)添加logstash用户

    addgroup logstash
    useradd -M -d /opt/logstash/ -s /bin/bash -g logstash logstash
    chown -R logstash.logstash /opt/logstash
    

    1.4) 利用上面修改的启动配置自动生成systemd服务

    /opt/logstash/bin/system-install /opt/logstash/config/startup.options
    systemctl daemon-reload
    systemctl enable logstash
    systemctl start logstash
    systemctl status logstash
    

    1.5) 安装drop插件
    注: 在使用logstash中,我们可能会在配置文件中用drop{}块来过滤一些不必要的东西,所以使用drop要安装插件才能使用。我们提前安装上

    su - logstash
    logstash-plugin install logstash-filter-drop
    

    1.6) 添加一个logstash配置/opt/logstash/config/logstash.conf
    暂时略过,后面集中配置组件的配置

    ———————————————————————————————————————————————————

    三.安装Filebeat

    1.1) 安装程序

    tar xf filebeat-oss-7.5.0-linux-x86_64.tar.gz -C /opt/
    mv /opt/filebeat-7.5.0-linux-x86_64/  /opt/filebeat
    

    1.2) 加入系统服务/lib/systemd/system/filebeat.service

    [Unit]
    Description=filebeat
    
    [Service]
    Type=simple
    # User=beats
    # Group=beats
    User=root
    Group=root
    # Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
    # Prefixing the path with '-' makes it try to load, but if the file doesn't
    # exist, it continues onward.
    EnvironmentFile=-/etc/default/filebeat
    EnvironmentFile=-/etc/sysconfig/filebeat
    ExecStart=/opt/filebeat/filebeat -e -c /opt/filebeat/filebeat.yml -d "publish"
    Restart=always
    WorkingDirectory=/opt/filebeat
    
    [Install]
    WantedBy=multi-user.target
    

    1.3) 启动服务

    systemctl daemon-reload 
    systemctl enable filebeat 
    systemctl start filebeat.service 
    systemctl status  filebeat.service 
    

    1.4) 配置文件

    暂时略过
    

    ————————————————————————————————————————————————————

    四.安装Kibana

    1.1) 安装程序 并 创建Kibana用户

    tar zxzvf kibana-6.8.6-linux-x86_64.tar.gz -C /opt/
    mv /opt/kibana-6.8.6-linux-x86_64 /opt/kibana
    
    userdd kibana
    chown -R kibana.kibana /opt/kibana
    

    1.2) 修改kibana配置文件/opt/kibana/config/kibana.yml

    server.port: 5601
    server.host: "192.168.2.116"
    elasticsearch.hosts: ["http://192.168.2.114:9200","http://192.168.2.115:9200","http://192.168.2.116:9200"]
    

    1.3) 配置系统服务/lib/systemd/system/kibana.service

    [Unit]
    Description=Kibana
    StartLimitIntervalSec=30
    StartLimitBurst=3
    
    [Service]
    Type=simple
    User=kibana
    Group=kibana
    # Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
    # Prefixing the path with '-' makes it try to load, but if the file doesn't
    # exist, it continues onward.
    EnvironmentFile=-/etc/default/kibana
    EnvironmentFile=-/etc/sysconfig/kibana
    ExecStart=/opt/kibana/bin/kibana "-c /opt/kibana/config/kibana.yml"
    Restart=always
    WorkingDirectory=/opt/kibana
    
    [Install]
    WantedBy=multi-user.target
    

    1.4)启动服务

    systemctl daemon-reload 
    systemctl start kibana.service 
    systemctl enable  kibana.service 
    

    临时测试curl -I 192.168.2.116:5601


    ES,Kibana细节优化

    主要包括ES节点间通过tls证书访问,es启用 xpack 的安全性功能,权限控制,kibana通过账户密码登录

    一.配置支持权限

    • 开启xpack的安全性功能
    echo "xpack.security.enabled: true">>/opt/elasticsearch/config/elasticsearch.yml
    

    二.配置ES节点之间使用TSL通信

    2.1) 为每个节点生成证书(使用es自带的工具创建CA)【只在其中一台es节点执行即可】
    注意:使用 ES 运行时使用的用户创建,这样生成出文件的权限是正确的。本机上的 elasticsearch 用户不能登录或用 su 命令切换,所以用 sudo 直接以这个用户执行命令,执行时先添加JAVA环境变量

    cd  /opt/elasticsearch
    sudo -u elasticsearch JAVA_HOME=/opt/jdk1.8.0_144 bin/elasticsearch-certutil ca
    # 运行时生成文件名就用默认,密钥不进行配置。
    # 生产完成后在当前路径会出现文件 elastic-stack-ca.p12
    

    2.2) 为集群中每个节点生成证书和秘钥【仍在上一步的es节点执行即可】

    sudo -u elasticsearch JAVA_HOME=/opt/jdk1.8.0_144 bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
    

    注意:在执行过程中依次需要输入 ca的密码(上一步中没有进行设置,为空) 证书路径(默认) 证书密码(不设置,为空)
    完成后当前路径会生成文件 elastic-certificates.p12;这个过程中并没有指定使用证书节点的主机名、 dns 和 IP地址。也就是说所有使用这个证书的节点都可以加入集群,这里所有节点就都使用这一个证书了。

    2.3) es集群所有节点都创建一个保存证书的目录,将刚生成的证书分发至这个目录保存

    mkdir /opt/elasticsearch/config/certs
    scp -p elastic-certificates.p12 es-02://opt/elasticsearch/config/certs/
    scp -p elastic-certificates.p12 es-03://opt/elasticsearch/config/certs/
    

    2.4)配置节点间tsl通信 【所有es节点操作】
    编辑elasticsearch.yml文件中添加:

    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: /opt/elasticsearch/config/certs/elastic-certificates.p12
    xpack.security.transport.ssl.truststore.path: /opt/elasticsearch/config/certs/elastic-certificates.p12
    

    重启服务。(如果起不来,排查一下所有es节点的certs目录属主属组是否为elasticsearch)

    三. 配置ES集群的内置用户密码

    为了安全起见,我们在上面已经开启了安全权限功能,现在我们为集群默认的内置用户配置密码。
    (默认的内置用户:elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user)

    sudo -u elasticsearch JAVA_HOME=/opt/jdk1.8.0_144 bin/elasticsearch-setup-passwords auto
    

    按照提示,将自动生成随机密码,密码自己要记录保存好。注意:配置时需要保持集群是启动状态。

    四.Kibana配置使用账号密码访问

    上面在es已经开启了xpack的安全权限功能后,已经配置了es内置用户的账号密码。现在kibana需要使用账号密码来连接es了。两种方式 :

    1. 直接在kibana.yaml中添加lasticsearch.username 和 elasticsearch.password
    2. 采用如下方式加密的存储用户名和密码(推荐)
      按提示输入用户名密码,我这里写的是es内置用户kibana和上面生成的随机密码
    cd /opt/kibana
    sudo -u kibana  JAVA_HOME=/opt/jdk1.8.0_144 bin/kibana-keystore create
    sudo -u kibana  JAVA_HOME=/opt/jdk1.8.0_144 bin/kibana-keystore add elasticsearch.username
    sudo -u kibana  JAVA_HOME=/opt/jdk1.8.0_144 bin/kibana-keystore add elasticsearch.password
    

    重启服务systemctl restart kibana.service
    再次打开kibana界面,使用kibana账户登录也可以使用自己创建的账户也可以,包括之前设置过密码的所有es内置账户(elastic为超级管理员)


    ELFK简单配置

    前面只搭建了环境ELFK的环境,我们现在简单配置一下实现elfk的联通性

    1. filebeat配置filebeat.yml

    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /opt/f.log
      fields:
        log_type: access
    
    output.logstash:
      enabled: true
      hosts: ["192.168.2.113:5044"]
    

    2. logstash配置logstash.conf

    input {
        beats {
            port => 5044
        }
    }
    
    filter {
         kv {
            field_split => "&?"
         } 
    }
    
    output {
        elasticsearch {
            hosts => ["http://192.168.2.114:9200","http://192.168.2.115:9200","http://192.168.2.116:9200"]
            index => "%{[@metadata][search]}-%{+YYYY.MM.dd}"
            document_type => "%{[@metadata][type]}"
            user => "logstash_server"
            password => "123456"
        }
    }
    

    3. kibana创建一个logstash_server用户并分配角色权限

    用于Logstash连接es时使用

    3.1)创建logstash_server的role

    image.png

    3.2)创建logstash_server的用户


    4. 写入测试数据,在kibana上显示。

    4.1)kibana上创建一个Index Patterns

    4.2)写入测试数据

    echo "www.baidu.com?id=2&name=123&age=30">>/opt/f.log
    

    4.3)查看结果
    如果没有,刷新过来多写入几次测试数据



    ————————————————————————————————————————————————————

    相关文章

      网友评论

          本文标题:ELFK搭建

          本文链接:https://www.haomeiwen.com/subject/afwhrdtx.html