使用docker搭建单机版ELKF所遇到的一些坑

此文针对7.6.2版本的elkf

一、搭建Elasticsearch遇到的问题

  1. max virtual memory areas vm.max*_map_count [65530] likely too low, increase to at least [262144]*
    

    max virtual memory areas vm.max*_map_count [65530] likely too low, increase to at least [262144]*

    修改 /etc/sysctl.conf文件,添加vm.max_map_count=262144一行,使用sycstl -p重置

  2. Java HotSpot(TM) 64-Bit Server VM warning: INFO:
    os::commit_memory(0x0000000085330000, 2060255232, 0) failed;
    error=’Cannot allocate memory’ (errno=12)
    

    elasticsearch5.0以后默认分配jvm空间大小为2g,内存不足以分配导致。

    运行docker命令加上-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"

二、搭建kibana遇到的问题

docker运行kibana最大的问题就是启动之后访问不了,因为kibana需要es输入,但是使用docker启动的话这两个容器的网络不在一个网段,就无法通信,所以我们需要在启动容器的时候指定network

  1. 创建docker network
docker network create somenetwork
  1. 启动es、kibana容器时,使用--network=someonework指定network
  2. 若没挂在kibana.yml,我们待启动好后,利用docker exec命令进入kibana容器编辑/usr/share/kibana/config/kibana.yml文件,修改elasticsearch.hosts: [ "http://192.168.8.10:9200" ] #改成es地址

三、关于logstash与Filebeat

logstash和filebeat的启动是很便捷的,我使用的时候遇到的主要问题就是配置文件的编辑

我这边主要的安装思路是,使用filebeat获取日志发送到logstash,进行过滤

  1. 使用filebeat接收多个日志,包括两个业务系统及nginx
  2. 利用logstash,在es中创建不同的index
filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /var/log/base.log
  tags: ["base-logs"]
  fields:
    log_type: base
  multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:' #将以空格开头的所有行合并到上一行 并把以Caused by开头的也追加到上一行
  multiline.negate: false
  multiline.match: after
....
....

这里标记了tagsfields键值对,我们可以在logstash中使用

# 我先贴出网上找到的配置文件使用tags的写法(logstash配置文件xxx.conf)
output {
    if [tags] == "base-logs" {
        elasticsearch {
            hosts => ["192.168.8.10:9200"]
            index => "base-logs"
        }
    }
 ...
 ...
}

这样配置的话,我们永远获取不到tags的值,也就是永远不能创建索引

我找遍了网上很多资料,都解决不了,于是我从logstash的日志下手

我们截取一段日志

{
          "tags" => [
        [0] "base-logs"
    ],
           "ecs" => {
        "version" => "1.4.0"
    },
       "message" => "2020-07-20 14:08:26.822  INFO [base,,,] 5184 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration",
           "log" => {
        "offset" => 64846975,
          "file" => {
            "path" => "/var/log/base.log"
        }
    },
        "fields" => {
        "log_type" => "base"
    },
         "agent" => {
        "ephemeral_id" => "80e14e5c-4653-43e3-8826-bb017bf90d64",
             "version" => "7.6.2",
                "type" => "filebeat",
            "hostname" => "a9617dbc992d",
                  "id" => "9c23379c-2bd3-403d-a7a9-6fa9c354785b"
    },
      "@version" => "1",
    "@timestamp" => 2020-07-20T14:08:26.822Z,
     "timestamp" => "2020-07-20 14:08:26.822",
          "host" => {
        "name" => "a9617dbc992d"
    },
         "input" => {
        "type" => "log"
    }
}

我们可以清晰的看到第一行 “tags” => [ [0] “base-logs” ]

我才恍然大悟,原来tags是一个数组,所以我们要改成下面这种写法

output {
    if [tags][0] == "base-logs" {
        elasticsearch {
            hosts => ["192.168.8.10:9200"]
            index => "base-logs"
        }
    }
 ...
 ...
}

使用field的话也是差不多的用法

output {
    if [fields][log_type] == "base" {
        elasticsearch {
            hosts => ["192.168.8.10:9200"]
            index => "base-logs"
        }
    }
 ...
 ...
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值