目录
  - 前言
  - 多配置文件的实现方式
  - 为logstash 增加模板
  - 将 logstash 作为服务启动

1. 前言

在使用 logstash 编写多个配置文件,写入到 elasticsearch 时,会出现数据写入混乱的问题,举例来说:

多个配置文件中规则如下:

A -> es-logstash-A
B -> es-logstash-B A 写入到 es-logstash-A 索引中
B 写入到 es-logstash-B 索引中

然而当 logstash 服务运行起来的时候并不是这样的,可能出现如下想象:

A-> es-logstash-A
B-> es-logstash-A

究其原因,是因为 logstash 运行起来的时候,会将所有的配置文件合并执行。因此,每个 input 的数据都必须有一个唯一的标识,在 filter 和 output 时,通过这个唯一标识来实现过滤或者存储到不同的索引。

2. 多配置文件的实现方式

如上所说,写入需要唯一标识,在logstash 中唯一标识推荐使用 type 或 tags 字段,然后通过 if 条件判断来实现。

首先来看下面一个示例:

在 /etc/logstash/conf.d 目录下有这样两个配置文件 [1.conf   a.conf ]

[root@192.168.118.14 /etc/logstash/conf.d]#ls
1.conf a.conf 1.conf
input {
file {
path => "/data/log/1.log"
start_position => "beginning"
sincedb_path => "/tmp/1_progress"
}
} output {
elasticsearch {
hosts => ["192.168.118.14"]
index => "1-log-%{+YYYY.MM.dd}"
}
} a.conf
input {
file {
path => "/data/log/a.log"
start_position => "beginning"
sincedb_path => "/tmp/a_progress"
}
} output {
elasticsearch {
hosts => ["192.168.118.14"]
index => "a-log-%{+YYYY.MM.dd}"
}
} /data/log/a.log
[root@192.168.118.14 ~]#cat /data/log/a.log
a /data/log/1.log
[root@192.168.118.14 ~]#cat /data/log/1.log
1

这两个配置很简单,规则:

  • 1.conf  读取 /data/log/1.log 写入到 1-log-[date] 索引
  • a.conf 读取 /data/log/a.log 写入到 a-log-[date] 索引

两个日志文件,都只有 1 行日志记录。

正确的结果是 生成两个索引,每个索引里只有一条记录。

接下来启动服务查看,多配置文件 命令启动方式如下:

正确的启动方式:

[root@192.168.118.14 ~]#logstash -f /etc/logstash/conf.d/

错误的启动方式:

[root@192.168.118.14 ~]#logstash -f /etc/logstash/conf.d/*

启动成功后,通过 elasticsearch-head 查看 索引及数据

发现每个 索引里却有 2 条记录,这不符合正常的逻辑,查看数据发现,每个索引里都是 1.log 和 a.log  的数据总和。

这也证明了 logstash 在写入数据的时候,是将所有的配置文件合并在一起的,运行起来数据写入就会混乱。要解决这种混乱就需要通过唯一标识和if 判断,logstash配置文件调整如下:

1.conf
input {
file {
path => "/data/log/1.log"
start_position => "beginning"
sincedb_path => "/tmp/1_progress"
type => "1-log"
}
} output {
if [type] == "1-log" {
elasticsearch {
hosts => ["192.168.118.14"]
index => "1-log-%{+YYYY.MM.dd}"
}
}
} a.conf
input {
file {
path => "/data/log/a.log"
start_position => "beginning"
sincedb_path => "/tmp/a_progress"
type => "a-log"
}
} output {
if [type] == "a-log" {
elasticsearch {
hosts => ["192.168.118.14"]
index => "a-log-%{+YYYY.MM.dd}"
}
}
}

上面修改的部分, input 里 增加了 type 字段,定义了唯一标识而在 output 中 通过if判断唯一标识来做响应的写入操作。

启动服务:

[root@192.168.118.14 ~]#logstash -f /etc/logstash/conf.d/

通过 elasticsearch-head 查看:

这次就完全符合预期的标准了。

3. 为logstash 增加模板

通过 elasticsearch-head 查看到 elasticsearch 默认是通过分片入库的,而且默认是 5 个主分片,5 个备份分片。 当作为日志存储时,数据可能没那么重要,不需要做 elasticsearch 的集群,但是也不想看到这些告警信息,这时候就需要 模板 了。

这里直接提供一个模板样本,可以直接使用。

{
"template" : "*", "version" : ,
"settings" : {
"index.refresh_interval" : "5s",
"number_of_shards": ,
"number_of_replicas":
},
"mappings" : {
"_default_" : {
"dynamic_templates" : [{
"message_field" : {
"path_match" : "message", "match_mapping_type" : "string", "mapping" : {
"type" : "text", "norms" : false
}
}
}, {
"string_fields" : {
"match" : "*", "match_mapping_type" : "string", "mapping" : {
"type" : "text", "norms" : false, "fields" : {
"keyword" : {
"type" : "keyword", "ignore_above" :
}
}
}
}
}],
"properties" : {
"@timestamp" : {
"type" : "date"
}, "@version" : {
"type" : "keyword"
}, "geoip" : {
"dynamic" : true, "properties" : {
"ip" : {
"type" : "ip"
}, "location" : {
"type" : "geo_point"
}, "latitude" : {
"type" : "half_float"
}, "longitude" : {
"type" : "half_float"
}
}
}
}
}
}
}

template.json

放置在这里目录里:

[root@192.168.118.14 ~]#ls /etc/logstash/template/template.json

"number_of_shards": 3,
        "number_of_replicas": 0

这一部分就是定义 主分片 和  复制分片的,可以适当的调整。

            "properties" : {
"@timestamp" : {
"type" : "date"
}, "@version" : {
"type" : "keyword"
}, "geoip" : {
"dynamic" : true, "properties" : {
"ip" : {
"type" : "ip"
}, "location" : {
"type" : "geo_point"
}, "latitude" : {
"type" : "half_float"
}, "longitude" : {
"type" : "half_float"
}
}
}
}

当要使用地图定位客户端位置的时候,这一段就必须加上, location 的type 的必须是 geo_point

为 logstash 配置文件添加模板配置,如下:

a.conf
input {
file {
path => "/data/log/a.log"
start_position => "beginning"
sincedb_path => "/tmp/a_progress"
type => "a-log"
}
} output {
if [type] == "a-log" {
elasticsearch {
hosts => ["192.168.118.14"]
index => "a-log-%{+YYYY.MM.dd}"
template => "/etc/logstash/template/template.json"
template_overwrite => "true"
}
}
} 1.conf
input {
file {
path => "/data/log/1.log"
start_position => "beginning"
sincedb_path => "/tmp/1_progress"
type => "1-log"
}
} output {
if [type] == "1-log" {
elasticsearch {
hosts => ["192.168.118.14"]
index => "1-log-%{+YYYY.MM.dd}"
template => "/etc/logstash/template/template.json"
template_overwrite => "true"
}
}
}

启动服务

[root@192.168.118.14 ~]#logstash -f /etc/logstash/conf.d/

通过 elasticsearch-head 查看集群状态及索引分片:

ok,新增的模板已经生效。尝试为不同的索引添加不同的模板结果出现各种问题,因此创建一个通用的模板。

4. 将 logstash 作为服务启动

在上面的启动中,都是直接通过命令 logstash 来启动的,其实可以通过修改 logstash.service 启动脚本来启动服务。

修改如下:

[root@192.168.118.14 ~]#vim /etc/systemd/system/logstash.service

ExecStart=/usr/share/logstash/bin/logstash "--path.settings" "/etc/logstash" "-f" "/etc/logstash/conf.d"

启动服务:

[root@192.168.118.14 ~]#systemctl daemon-reload
[root@192.168.118.14 ~]#systemctl start logstash

ELK - logstash 多个配置文件及模板的使用的更多相关文章

  1. [elk]logstash的最佳实战-项目实战

    重点参考: http://blog.csdn.net/qq1032355091/article/details/52953837 不得不说这是一个伟大的项目实战,是正式踏入logstash门槛的捷径 ...

  2. ELK——Logstash 2.2 date 插件【翻译+实践】

    官网地址 本文内容 语法 测试数据 可配置选项 参考资料 date 插件是日期插件,这个插件,常用而重要. 如果不用 date 插件,那么 Logstash 将处理时间作为时间戳.时间戳字段是 Log ...

  3. ELK logstash 处理MySQL慢查询日志(初步)

    写在前面:在做ELK logstash 处理MySQL慢查询日志的时候出现的问题: 1.测试数据库没有慢日志,所以没有日志信息,导致 IP:9200/_plugin/head/界面异常(忽然出现日志数 ...

  4. ELK logstash geoip值为空故障排查

    首先我们用的是elasticsearch+kibana+logstash+filebeat 客户端filebeat收集日志后经过服务端logstash规则处理后储存到elasticsearch中,在k ...

  5. 主流框架(SSH及SSM)配置文件的模板头文件

    SSH三大框架整合配置头文件模板如下: 一:Spring配置文件(beans.xml)模板:<beans    xmlns="http://www.springframework.or ...

  6. ELK(Logstash+Elasticsearch+Kibana)的原理和详细搭建

    一. Elastic Stack Elastic Stack是ELK的官方称呼,网址:https://www.elastic.co/cn/products ,其作用是“构建在开源基础之上, Elast ...

  7. 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板

    最近在学SSH三大框架的整合,在此对他们整合时相关配置文件做一简单的模板总结,方便以后复用! 首先是web.xml配置文件,这里面就配置一些简单的监听器.过滤器,包括spring核心配置文件appli ...

  8. ELK logstash 启动慢的解决方法

    最近开始测试部署ELK, 在部署logstash的时候出现一个故障: logstash在第一次安装完成以后启动正常, 但是之后启动时间越来越长, 5分钟以上甚至10多分钟.以至于怀疑程序错误, 在重装 ...

  9. 【ELK】【docker】【elasticsearch】2.使用elasticSearch+kibana+logstash+ik分词器+pinyin分词器+繁简体转化分词器 6.5.4 启动 ELK+logstash概念描述

    官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-prod ...

随机推荐

  1. 介于JAVAswing和Socket写的聊天室

    在厦门的第一阶段给我们复习了JAVASE基础,第一阶段的小玩具叫我们自选题材,我自己选了聊天室这个内容,这个小玩具无论是线程,还是网络编程,都会涉及到,比较有综合性,所以我选了这个: 这是我的包体结构 ...

  2. Node.js GET/POST对应的url/query-string常用的方法介绍

    <一>,在学node.js--GET/POST请求时,先看模块url和query-string的用法 1. 模块url用法,一般用于解析get请求. parse: [Function: u ...

  3. spring cloud (三) 路由 zuul

    1 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  4. 《TensorFlow2深度学习》学习笔记(三)Tensorflow进阶

    本篇笔记包含张量的合并与分割,范数统计,张量填充,限幅等操作. 1.合并与分割 合并 张量的合并可以使用拼接(Concatenate)和堆叠(Stack)操作实现,拼接并不会产生新的维度,而堆叠会创建 ...

  5. 从url中下载资源(目前测试只有照片,文件类的没有进行测试)

    首先:是工具类: public class DownLoadUtils { /** * 从网络Url中下载文件 * * @param urlStr url路径 * @param fileName 文件 ...

  6. PageHelper分页正确用法

    依赖和配置就不说了,说用法 Page<Object> page = PageHelper.startPage(pageNum, pageSize); List<SysRoleDTO& ...

  7. jvm 堆栈概念

    关于JVM的工作原理以及调优是一个向往已久的模块,终于有幸接触到:http://pengjiaheng.iteye.com/blog/518623 那就顺着这个思路,来梳理一下自己看到后的结论和感想. ...

  8. mybatis框架-SqlSession会话操作数据库的两种方式

    1.通过SqlSession实力来直接执行已经映射的sql语句 例如,查询整个用户表中的信息 在UserMapper.xml中编写sql语句 编写测试方法: 注意:这里使用的selectList方法: ...

  9. janusgraph-mgmt中的一些操作

    关闭事务 mgmt = graph.openManagement(); ids = mgmt.getOpenInstances(); for(String id : ids){if(!id.conta ...

  10. BZOJ1113 海报PLA1(单调栈入门题)

    一,自己思考下 1,先自己思考下 N个矩形,排成一排,现在希望用尽量少的海报去cover住它们. 2,不懂. 着实不懂. 3,分析下,最优性问题对吧,然后就每什么想法了.. 虽然肯定和单调栈和单调队列 ...