ELK 单机部署,多 beat 节点

参考文章

适用场景:多个项目或服务,独立部署,各个服务有自己的 log 文件。为便于查看、过滤等,可单机部署 ELK 服务后,各个服务通过 filebeat 服务将 log 发送至 ELK 机器。

在这里插入图片描述

一、安装 java

$ sudo yum install java

$ java -version
openjdk version "11.0.5" 2019-10-15 LTS
OpenJDK Runtime Environment Corretto-11.0.5.10.1 (build 11.0.5+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.5.10.1 (build 11.0.5+10-LTS, mixed mode)

对于 elasticsearch、logstash 和 kibana,Elastic.co 都提供了多种环境的安装方式,这里只介绍通过 RPM 的方式,其他环境可参考官网文档

二、安装 elasticsearch

  1. 下载安装公钥。
    $ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
  2. 增加 yum 源。在 /etc/yum.repos.d/ 创建文件 elasticsearch.repo 并写入以下内容:
    [elasticsearch-7.x]
    name=Elasticsearch repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
  3. 安装、启动
    $ sudo yum install elasticsearch
    
    $ sudo systemctl daemon-reload
    
    $ sudo systemctl enable elasticsearch.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
    
    $ sudo systemctl start elasticsearch.service
    
    $ sudo systemctl | grep elasticsearch
    elasticsearch.service                                         loaded active running   Elasticsearch
    
    注意:elasticsearch 基于 java,默认占用的最小内存是 1G,如果机器内存不够启动时会报错 Not enough space,将 /etc/elasticsearch/jvm.options 中的 -Xms-Xmx 改小后重试即可。

三、安装 logstash

  1. 下载安装公钥。如果上面执行过,可跳过。
    $ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
  2. 增加 yum 源。在 /etc/yum.repos.d/ 创建文件 logstash.repo 并写入以下内容:
    [logstash-7.x]
    name=Elastic repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
  3. 安装
    $ sudo yum install logstash
    
    $ sudo systemctl daemon-reload
    
    $ sudo systemctl enable logstash.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
    
  4. 配置。在 /etc/logstash/conf.d/ 创建文件 beat2es.conf,并写入以下内容:
    input {
        beats{
            port => 5044
            ssl => false
        }
    }
    filter {
        grok {
            match => { "message" => "%{TIMESTAMP_ISO8601:[@metadata][timestamp]} %{DATA:message}" }
            overwrite => [ "message" ]
        }
        date {
            match => [ "[@metadata][timestamp]" , "yyyy-MM-dd HH:mm:ss,SSS" ]
        }
    }
    output {
        elasticsearch {
            hosts => ["localhost:9200"]
            index => "%{[fields][appname]}-%{+YYYY.MM.dd}"
            sniffing => true
        }
    }
    
  5. 启动
    $ sudo systemctl start logstash
    

四、安装 kibana

  1. 下载安装公钥。如果上面执行过,可跳过。
    $ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
  2. 增加 yum 源。在 /etc/yum.repos.d/ 创建文件 kibana.repo 并写入以下内容:
    [kibana-7.x]
    name=Kibana repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
  3. 安装、启动
    $ sudo yum install kibana
    
    $ sudo systemctl daemon-reload
    
    $ sudo systemctl enable kibana.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
    
    $ sudo systemctl start kibana.service
    
至此,ELK 服务已经部署完成。logstash 监听 5044 端口,所有发送到 5044 端口的内容都会传送至 elasticsearch,可通过 kibana 可视化搜索页面进行查询。
kibana 默认部署在 locaohost:5601,为了增加安全性,需通过 nginx 为 kibana 设置用户登陆访问。
如果不需要安全性,可修改 /etc/kibana/kibana.yml 文件,将其中的 server.host 的值改为 0.0.0.0 后重启 kibana 服务,这样外网可直接通过该机器的 5601 端口访问 kibana 服务。

五、设置 kibana 登陆访问

  1. 添加 nginx 源
    $ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    
  2. 安装 nginx
    $ sudo yum install nginx
    
  3. 配置 nginx。修改 /etc/nginx/conf.d/default.conf/ 路由的配置,如下:
    location / {
         auth_basic "secret";
         auth_basic_user_file /etc/nginx/db/passwd.db;
         proxy_pass http://localhost:5601;
         proxy_set_header Host $host:5601;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Via "nginx";
      }
    
  4. 安装 httpd
    $ sudo yum install httpd
    
  5. 设置用户。用户名:jack,密码:123456
    $ sudo htpasswd -bc /etc/nginx/pwd.db jack 123456
    
  6. 启动 nginx
    $ sudo systemctl nginx.service
    
至此,访问该机器的 80 端口,通过用户密码验证,即可访问到 kibana 服务。

六、安装 filebeat

filebeat 服务可安装在任何有 log 文件的机器上,其实时监听 log 文件,并将内容发送至 logstash 服务。

  1. 下载 rpm 文件,并安装
    $ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 22.7M  100 22.7M    0     0  24.8M      0 --:--:-- --:--:-- --:--:-- 24.8M
    
    $ sudo rpm -vi filebeat-7.4.2-x86_64.rpm
    Preparing packages...
    filebeat-7.4.2-1.x86_64
    
    $ filebeat version
    filebeat version 7.4.2 (amd64), libbeat 7.4.2 [15075156388b44390301f070960fd8aeac1c9712 built 2019-10-28 19:46:13 +0000 UTC]
    
  2. 配置。配置文件按模块分为了几部分,如 Filebeat inputs、Filebeat modules、Outputs等,在这里只需关心两个模块,一是 Filebeat inputs,另个为 Outputs。
    Filebeat inputs 用来配置 Filebeat 服务所监听、读取的文件,以及读取时的一些选项,这里的文件,即为 log 文件。
       * enabled: true 表示开启
    
       * paths: 指定 log 文件的路径
    
       * fields: 配置元数据,appname 为必填项,用来区分不同项目
    
       * multiline.pattern: 正则表达式
    
       * multiline.negate: 是否反向。true 表示匹配 multiline.pattern 时开始新的一行;false 表示不匹配时开始新的一行
    
       * multiline.match: 连接的位置。after 表示不匹配 multiline.pattern 时连在上一句后面;before 表示连在下一句前面
    
       这 3 项用来设置多行识别,'^[0-9]{4}-[0-9]{2}-[0-9]{2}' 是识别,行首格式为 YYYY-MM-DD 的日期,即每当行首为该格式的日期时,如 2019-11-15,都会重新开始一行。
    
    Outputs 用来配置读取到的内容,如何输出。配置里缺省的输出方向是 Elasticsearch,这里需要切换为 Logstash。Logstash 的 SSL 目前尚未开启,因此只需配置 hosts 即可。
       * hosts: ["{host}:5044"],logstash 服务所在的主机地址
    
    如无特殊需求,修改下面内容中的 pathsappname 以及 hosts,替换原 filebeat.yml 文件内容,即可。
       #=========================== Filebeat inputs =============================
     
    filebeat.inputs:
     
    - type: log
      enabled: true
      paths:
        - /var/log/app.log
      fields:
        appname: {your-app-name}
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
     
    #============================= 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: false
     
    #==================== Elasticsearch template setting ==========================
     
    setup.template.settings:
      index.number_of_shards: 1
      #index.codec: best_compression
      #_source.enabled: false
     
    #================================ Outputs =====================================
     
    #----------------------------- Logstash output --------------------------------
    output.logstash:
      # The Logstash hosts
      hosts: ["{host}: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: ~
      - add_cloud_metadata: ~
    
  3. 启动
    $ sudo systemctl enable filebeat.service
    
    $ sudo systemctl start filebeat.service
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章