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

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

安装好了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

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安装及安装过程中的问题的解决)