Logstash动态模板映射收集Nginx的Json格式的日志

Logstash传输给ES的数据会自动映射为5索引,5备份,字段都为text的的索引。这样基本上无法进行数据分析。
所以必须将Logstash的数据按照既定的格式存储在ES中,这时候就要使用到ES模板技术了。在ES中可以定义自定义模板和动态模板,之后es会自动将相关索引映射为模板规定的格式

编译动态映射模板文件bigdata.template

在Json日志文件中的KEY的位置不固定、或字段数不明确时使用动态映射模板

{
        "template": "bigdata-template",
        "settings": {
                "index.number_of_shards": 5,
                "number_of_replicas": 1
        },
        "mappings": {
                "_default_": {
                        "_all": {
                                "enabled": true,
                                "omit_norms": true
                        },
                        "dynamic_templates": [{
                                "message_field": {
                                        "match": "message",
                                        "match_mapping_type": "string",
                                        "mapping": {
                                                "type": "string",
                                                "index": "analyzed",
                                                "omit_norms": true,
                                                "fielddata": {
                                                        "format": "disabled"
                                                }
                                        }
                                }
                        }, {
                                "string_fields": {
                                        "match": "*",
                                        "match_mapping_type": "string",
                                        "mapping": {
                                                "type": "string",
                                                "index": "not_analyzed",
                                                "doc_values": true
                                        }
                                }
                        }],
                        "properties": {
                                "@timestamp": {
                                        "type": "date"
                                },
                                "@version": {
                                        "type": "string",
                                        "index": "not_analyzed"
                                }
                        }
                }
        }
}

dynamic_templates  就是配置具体的动态模板匹配项
"match_mapping_type": "string" 是匹配固定的类型
"match": "time"    匹配字段名为time的数据
"unmatch": "data" 不匹配字段名为data的数据
mapping 就是将匹配的数据项映射为定义的数据类型

Logstash配置文件 nginx.conf:

input {
    file {
      path => "/usr/local/openresty/nginx/logs/user2.log"
      type => "nginx-bigdata"
      codec => "json"
    }
}

filter {
    json {
      source => "u_data"
    }
}

output {
    if [type] == "nginx-bigdata" {
      elasticsearch {
        hosts => ["172.17.213.60:9200", "172.17.213.61:9200"]
        index => "nginx-bigdata"
        manage_template => false
        template_overwrite => true
        template_name => "bigdata-template"
        template => "/usr/local/logstash-6.2.4/bigdata.template"
        document_type => "nginx-bigdata"
      }
    }
}

Nginx的配置文件中关于日志格式的配置:(此处我只保留了需要的一个字段范围)

escape=json  :nginx 1.11.8版本后才提供此参数

 log_format userlog escape=json ‘{"u_data":"$u_data"}‘; ... access_log logs/user.log userlog;

产生的日志格式:

{"u_data":"{\"appid\":\"nchaopai\",\"args\":{\"contentId\":0,\"duration\":111811,\"parentId\":0,\"totaltime\":0,\"type\":0},\"bk\":\"-\",\"cp_ver\":\"3.0.5\",\"duid\":\"2cba98f8ddc18464\",\"e\":\"nchaopai.main.stay-duration\",\"os\":\"A\",\"ts\":1572584611,\"ver\":\"8.11.11\"}"}

之后在Kibana里看到就是这样的:

参考资料:https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/filter/json.html

原文地址:https://www.cnblogs.com/wjoyxt/p/11777429.html

时间: 2024-10-11 06:02:48

Logstash动态模板映射收集Nginx的Json格式的日志的相关文章

ELK收集Apache的json格式访问日志并按状态码绘制图表

前言 需求说明: 部署一个Apache,收集Apache的json格式访问日志,并且将访问日志的状态码在kibana上绘制饼状图,添加到kibana的dashboard. 环境说明: 10.0.0.101(test101)--部署apache.filebeat10.0.0.102(test102)--部署elasticsearch.kibana备注:本次实验的重点在于怎样收集Apache的json格式日志,因此没有装logstash.日志数据从filebeat--elasticsearch--k

ELK实战之Nginx、Tomcat、Java日志收集以及TCP收集日志使用

1.收集Nginx的json格式日志 1.1.Nginx安装 [[email protected] ~]# yum install nginx -y [[email protected]-node1 ~]# vim /etc/nginx/nginx.conf #修改日志格式为json格式,并创建一个nginxweb的网站目录 log_format access_json '{"@timestamp":"$time_iso8601",' '"host&quo

ELK 二进制安装并收集nginx日志

对于日志来说,最常见的需求就是收集.存储.查询.展示,开源社区正好有相对应的开源项目:logstash(收集).elasticsearch(存储+搜索).kibana(展示),我们将这三个组合起来的技术称之为ELKStack,所以说ELKStack指的是Elasticsearch(java).Logstash(jruby).Kibana技术栈的结合, ELK5.X搭建并收集Nginx日志 ELK ELK5.X搭建并收集Nginx日志一.基础环境配置及软件包下载 二.安装Elasticsearch

slf4j-logback 日志以json格式导入ELK

同事整理的,在此分享.logback,log4j2 等slf4j的日志实现都可以以json格式输出日志, 这里采用的是logback.当然也可以以文本行的格式输出,然后在logstash里通过grok解析,但是直接以json格式输出,在logstash处理时效率会高一点. Logback 输出 Json格式日志文件 为了让 logback 输出JSON 格式的日志文件,需要在pom.xml 加入如下依赖 <dependency>    <groupId>net.logstash.l

使用logstash收集java、nginx、系统等常见日志

目录 1.使用codec的multiline插件收集java日志... 1 2.收集nginx日志... 2 3.收集系统syslog日志... 3 4.使用fliter的grok模块收集mysql日志... 4 1.使用codec的multiline插件收集java日志 对于采用ELK作为应用日志来说,多行消息的友好展示是必不可少的,否则ELK的价值就大大打折了.要正确的处理多行消息,需使用multiline插件 比如,对于java日志而言,可以使用: multiline.pattern: '

ELK学习实验014:Nginx日志JSON格式收集

1 Kibana的显示配置 https://demo.elastic.co/app/kibana#/dashboard/welcome_dashboard 环境先处理干净 安装nginx和httpd-tools 2 使用压测工具产生日志 [[email protected] ~]# ab -n 100 -c 100 http://192.168.132.134/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright

Logstash处理json格式日志文件的三种方法

假设日志文件中的每一行记录格式为json的,如: {"Method":"JSAPI.JSTicket","Message":"JSTicket:kgt8ON7yVITDhtdwci0qeZg4L-Dj1O5WF42Nog47n_0aGF4WPJDIF2UA9MeS8GzLe6MPjyp2WlzvsL0nlvkohw","CreateTime":"2015/10/13 9:39:59",&

ELK集群部署及收集nginx日志

一.ELK说明 二.架构图 三.规划说明 四.安装部署nginx+logstash 五.安装部署redis 六.安装部署logstash server 七.安装部署elasticsearch集群 八.安装kibana 一.ELK说明 ELK Stack 是 Elasticsearch.Logstash.Kibana 三个开源软件的组合.在实时数据检索和分析场合,三者通常是配合共用,而且又都先后归于 Elastic.co 公司名下,故有此简称. ELK Stack 在最近两年迅速崛起,成为机器数据

Elk+filebeat收集docker集群swarm中的nginx和tomcat容器的日志信息

前言: 之前有说过elk收集nginx日志, 现在来说一下收集容器集群的日志收集Elk的安装这里不在说了,上来直接怼, 这里是elk的服务器:的服务状态:以及端口 Logstash是主要的配置内容这里: 如下 input { beats { port => 5044 } } filter { if "nginx-accesslog" in [tags] { grok { match => { "message" => "%{HTTPDAT