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

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

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

{
"template": "bigdata-template",
"settings": {
"index.number_of_shards": ,
"number_of_replicas":
},
"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的配置文件中关于JSON日志格式转换的配置:(此处我只保留了需要的一个字段范围)

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

 log_format userlog escape=json '{"u_data":"$u_data","@timestamp":"$time_iso8601"}';
...
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里看到就是这样的:

常用格式如下:

    log_format log_json escape=json '{"timestamp": "$time_local",'
'"remote_addr": "$remote_addr",'
'"referer": "$http_referer",'
'"request": "$request",'
'"statu": "$status",'
'"byte": "$body_bytes_sent",'
'"agen": "$http_user_agent",'
'"x_forwarded": "$http_x_forwarded_for",'
'"up_resp_time": "$upstream_response_time",'
'"request_time": "$request_time"}';

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

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

  1. filebeat收集nginx的json格式日志

    一.在nginx主机上安装filebeat组件 [root@zabbix_server nginx]# cd /usr/local/src/ [root@zabbix_server src]# wge ...

  2. 收集Nginx的json格式日志(五)

    一.配置nginx [root@linux-node1 ~]# vim /etc/nginx/nginx.conf #修改日志格式为json格式,并创建一个nginxweb的网站目录 log_form ...

  3. 使用filebeat解析nginx的json格式日志,并且保存原始message字段的值,输出到es中并通过grafana图形化显示

    1.nginx日志调成json样式 log_format json '{"@timestamp":"$time_iso8601",' '"server ...

  4. ELK之收集Nginx、Tomcat的json格式日志

    1.安装Nginx yum -y install nginx vim /etc/nginx/nginx.conf # 修改日志格式为json格式,并创建一个nginxweb的网站目录 log_form ...

  5. Nginx 高级配置-自定义json格式日志

    Nginx 高级配置-自定义json格式日志 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在大数据运维工作中,我们经常会使用flume,filebeat相关日志收集工具取收集日志 ...

  6. nginx 返回json格式内容

    例子: #如果访问的ip是192.168.1.1,就直接返回json格式的内容 location / { default_type application/json; #####格式 if ( $re ...

  7. Docker安装ELK并实现JSON格式日志分析

    ELK是什么 ELK是elastic公司提供的一套完整的日志收集以及前端展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch.Logstash和Kibana. 其中Logstash ...

  8. Maven项目配置Logback输出JSON格式日志

    最近,项目提出需求,日志需要固定输出为JSON格式,以便后端Flink程序解析. 项目背景 项目为简单的Maven项目,日志由Filebeat采集,因此不需要配置输出至Logstash. 下面为pom ...

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

    假设日志文件中的每一行记录格式为json的,如: {"Method":"JSAPI.JSTicket","Message":"JS ...

随机推荐

  1. java list map在初始化的时候添加元素

    List<String> list = new ArrayList<String>(){{ add("First Object"); add("S ...

  2. ML-对偶(Duality)问题初识

    Primal vs Dual 为什么要把原始问题(primal) 转为 对偶问题(dual), 主要原因在于, 求解方便吧大概. 对偶问题 原始问题和其对偶问题, 都是对看待同一个问题的,从不同角度, ...

  3. Golang: 读写之外的其他文件操作

    在上一篇文章中,我们介绍了常用的文件读写操作,今天接着来研究一下,除了读写以外的其他常见文件操作. 一.创建目录: package main import ( "fmt" &quo ...

  4. django memcached/redis缓存 =====缓存session

    全站使用 例如 博客等缓存,通过中间件实现全站缓存. 加缓存中间件,那么多中间件加在什么位置? 请求时:缓存加在中间件里的最后一个,比如一次经过1.2.3.4中间件,加在4 返回事:缓存加在中间件里的 ...

  5. 移动端 1px 像素边框问题的解决方案(Border.css)

    前言 关于什么是移动端1像素边框问题,先上两张图,大家就明白了. 解决方案 将以下代码放在border.css文件中,然后引入 常用className border:整个盒子都有边框 border-t ...

  6. Twitter Storm学习笔记

    官方英文文档:http://storm.apache.org/documentation/Documentation.html 本文是学习笔记,转载整合加翻译,主要是为了便于学习. 一.基本概念 参考 ...

  7. 20180414模拟赛T2——拼图

    拼图 源程序名 puzzling.??? (PAS,BAS,C,CPP) 可执行文件名 puzzling.EXE 输入文件名 puzzling.IN 输出文件名 puzzling.OUT 时间限制 1 ...

  8. hive删除数据(转)

    转自:https://www.cnblogs.com/linn/p/6196293.html 按分区删除: ALTER TABLE test1  DROP PARTITION (dt='2016-04 ...

  9. ubuntu及Cenos国内镜像下载

    打开:https://man.linuxde.net/download/ CentOS 7提供了三种ISO镜像文件的下载: DVD ISO 标准安装版,一般下载这个就可以了(推荐) Everythin ...

  10. apache pinot-docker-compose 运行试用

    apache pinot 是一个实时的OLAP 数据存储,同时包含了自己的查询语言,因为maven 构建花费时间较大 所以使用docker-compose 运行 docker-compose 文件   ...