美文网首页
ELKF安装及安装过程中的问题的解决

ELKF安装及安装过程中的问题的解决

作者: entro | 来源:发表于2020-04-10 21:15 被阅读0次

    Elastic Stack(elk and so on)

    [TOC]

    旧称X-Pack,是一系列围绕elasticSearch的组件功能.比如常被提起的elk(日志采集分析)。
    elk指 elasticsearch(存储+搜索)、logstash(收集)、kibana(展示) 三个组件.

    几个常用组件介绍

    1. Filebeat: 日志采集的进程agent,负责对数据进行采集,转换,并发送到存储库.
    2. Logstash: 开源的服务器端数据处理管道,能够同时从多个来源处对数据进行采集,转换,并发送到存储库.
    3. ElasticSearch:数据存储检索引擎,you know for search.
    4. Kibana: 以图表的形式呈现数据,并且具有可扩展的用户界面,全方位可视化配置和管理 Elastic Stack.

    一.ElasticSearch

    1.1.本体安装

    由于GFW和网络不稳定的原因,采用下载安装包安装(以7.6.1为例)
    下载地址:https://www.elastic.co/downloads/elasticsearch

    1. 解压后,配置./config/elasticsearch.yml
    #可以访问的ip地址
    network.host: 0.0.0.0
    #http访问端口
    http.port: 8200
    #同时设置集群名/节点名(集群名要一样,这样可以自动组网,节点名要不一样)
    cluster.name: ES4ELK
    node.name: master
    #Pass an initial list of hosts to perform discovery when this node is started:
    #启动节点主动发现的主机列表
    discovery.seed_hosts: ["127.0.0.1"]
    

    2.启动./bin/elasticsearch -d -d参数表示后台启动elasticsearch.

    3.查看进程 ps aux |grep elasticsearch

    1.2.插件安装(ik分词器)

    1.解压插件到指定位置
    unzip elasticsearch-analysis-ik-7.6.1.zip -d elasticsearch/plugins/ik
    2.重启es

    二、安装kibana

    下载地址:https://www.elastic.co/downloads/kibana

    1. 解压后,配置./config/kibana.yml
    server.port: 8400
    server.host: "172.18.4.82"
    server.name: "Entropy"
    elasticsearch.hosts: ["http://localhost:8200"]
    i18n.locale: "zh-CN"
    

    2.后台启动kibana:nohup ./bin/kibana
    3.查看进程使用 lsof -i:port 因为kibana实际及nodejs项目,并没有名为kibana的进程.

    三、安装logstash

    下载地址:
    https://www.elastic.co/downloads/logstash

    1. 解压,配置./config/logstash.yml
    node.name: logstash-master
    pipeline.id: main
    http.host: "172.18.4.82"
    http.port: 8500
    
    1. 启动测试
      logstash是数据处理管道,所以除了主配置logstash.yml外,启动的时候还需要使用-e参数指定输入输出格式配置。
      解压完毕使用命令 bin/logstash -e 'input { stdin { } } output { stdout {} }'启动logstash测试。
      当看到输出Pipeline started,输入任意字符串,logstash以标准输出的方式回显:
    
    [2020-04-03T21:20:06,326][INFO ][logstash.javapipeline    ][main] Pipeline started {"pipeline.id"=>"main"}
    The stdin plugin is now waiting for input:
    [2020-04-03T21:20:06,396][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
    [2020-04-03T21:20:06,879][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
    你好1
    {
          "@version" => "1",
        "@timestamp" => 2020-04-03T13:20:06.401Z,
              "host" => "v-next-cloud.sz.kingdee.net",
           "message" => "你好1"
    }
    

    则表示logstash安装正确,使用ctrl+d(发送EOF)退出当前进程。

    到这里logstash可以正常启动,一般的,我们filebeat来收集日志给到logstash
    看到这里可以先到下一节,安装配置filebeat然后再回来继续阅读剩下的内容。安装配置filebeat
    <span id="jumpback"></span>

    安装好了filebeat,那么配置一个接受filebeat输入输出配置文件filebeat-pipeline.conf:

    2.2 从filebeats接受输入,输出到elasticsearch

    input {
        beats {
            port => "5044"
        }
    }
    output {
        elasticsearch { hosts => ["localhost:9200"] }
        stdout { codec => rubydebug }
    }
    filter {
      mutate {
        remove_field => [ "host" ]
      }
    }
    

    启动命令 ./bin/logstash -f filebeats-pipeline.conf --config.test_and_exit

    --config.test_and_exit选项是测试你的配置文件写的是否正确的提示功能.当看到提示:
    Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
    表示配置文件正确.

    配置正确则执行./bin/logstash -f filebeats-pipeline.conf --config.reload.automatic

    --config.reload.automatic选项让改变的配置在不重启服务的情况下生效。

    三、安装配置filebeat

    <span id="jump"></span>

    1.下载解压

    2.配置 filebeat.yml

    filebeat.inputs:
    - type: log
      # Change to true to enable this input configuration.
      enabled: true
      # auto relase file handler ,default is 5m
      #close_inactive: 5m
      # scan frequency
      scan_frequency: 10s
      # ignore file modified before this confiture,must grater than close_inactive
      ignore_older: 73h
      # Paths that should be crawled and fetched. Glob based paths.
      paths:
        - /var/ai/log/*.log
    

    关闭配置文件中默认打开的elasticsearch输出相关配置并打开logstash相关的tcp端口配置:

    output.logstash:
      # The Logstash hosts this port is logstash tcp not http
      hosts: ["test.tocute.cn:5044"]
    

    then run
    nohup ./filebeat -e -c filebeat.yml -d "publish" >log.log 2>&1 &

    看到这里可以跳回到配置logstash的地方继续阅读 安装配置logstash

    四、碰到的一些问题

    1.1 启动问题:vm-max-map-count 太小报错

    修复方法:
    https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html

    1.2 cluster health: yellow (1 of 2)

    单点启动后,默认副本(replicas)个数是1,其实没有副本,所以设置成0.
    所以设置index的number_of_replicas为0,可以修复状态为yellow的问题.

    PUT _all/_settings
    {
        "index": {
            "number_of_replicas": 0
        }
    }
    
    1.3 无法自动组成集群

    拷贝安装包多个节点启动的,需要把./data目录删除,然后启动,否则无法自动组网

    1.4 索引建立的时候可以设置分片(number_of_replicas),创建后不能修改

    每个节点上的分片个数只能在创建索引的时候指定,一旦索引创建则不能修改。

    1.5.filebeat传输到logstash碰到的一些问题

    failed to parse field [host] of type [text] in document
    filebeat 传输到host的字段中host是一个对象

      "host" => {
                       "id" => "f5c67b3e099849f394957ff67349b277",
             "architecture" => "x86_64",
                       "os" => {
                  "family" => "redhat",
                  "kernel" => "3.10.0-693.el7.x86_64",
                "platform" => "centos",
                 "version" => "7 (Core)",
                "codename" => "Core",
                    "name" => "CentOS Linux"
            },
    

    这里转换字段类型的时候出了问题,可以修改logstash入参出参格式文件filebeat-pipeline.conf增加过滤器移除host字段。

    filter {
      mutate {
        remove_field => [ "host" ]
      }
    }
    
    1.6 filebeat 过一段时间自动关闭

    报错:File is inactive:*.log. Closing because close_inactive of 5m
    或者:Reader was closed: /var/ai/log/ai.log. Closing.

    一段时间被监测的文件没有新的输入filebeat(close_inactive)会自动关闭,默认值是5m.
    当logback等系统滚动日志名称的时候,filebeat持有旧文件的句柄.
    close_inactive时间过后会自动关闭,scan_frequency是扫描新文件的频率.
    使用nohup的方式启动的话会时常挂掉,而使用service方式启动,则可以在filebeat挂掉后自动重启。
    /usr/lib/systemd/system/filebeat.service

    [Unit]
    Description=filebeat server daemon
    Documentation=/var/elk/filebeat/filebeat -help
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    User=kduser
    Group=kduser
    Environment="BEAT_CONFIG_OPTS=-e -c /var/elk/filebeat/filebeat.yml"
    ExecStart=/var/elk/filebeat/filebeat  $BEAT_CONFIG_OPTS
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    其中的用户和用户分组必须正确,并且对filebeat相关文件有权限。
    创建快捷方式
    sudo ln -s /usr/lib/systemd/system/filebeat.service /etc/systemd/system/multi-user.target.wants/filebeat.service

    启动(第一行修改xx.service文件后让其生效):

    sudo systemctl daemon-reload
    sudo systemctl start filebeat
    

    相关文章

      网友评论

          本文标题:ELKF安装及安装过程中的问题的解决

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