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. Flask的上下文管理

    flask上下文管理 1.运用的知识点 val = threading.local() def task(arg): #threading.local() val.xxx=123 #内部,获取当前线程 ...

  2. .Net core 在类库中获取配置文件Appsettings中的值

    大多数情况,我们开发的程序中都含有很多个类库和文件夹,有时候,我们会遇到程序中的类库需要获取配置文件的信息的情况. 像dapper 中需要使用连接字符串的时候,那么我们一直从主程序中传值这是个不好的方 ...

  3. Socket网络编程-IO各种概念及多路复用

    Socket网络编程-IO各种概念及多路复用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作系统相关知识 1>.同步和异步  函数或方法被调用的时候,调用者是否得到最 ...

  4. Linux无法免密登录的原因

    一.免密登录的方法 下面操作是把/root/.ssh/id_dsa.pub文件内容追加到192.168.7.100系统中的/root/.ssh/authorized_keys文件中 # 创建并发送密钥 ...

  5. 《剑指Offer》-004 -Java版二叉树先序和中序遍历返回原二叉树

    如题 (总结要点) 注意空值 假定数据是没有问题的 前序(根左右) ,中序(左根右), 故每次的第一个节点就是根节点 没用数组的库函数,自己手写了两个方法 用Java代码写二叉树很舒服, 没有啥指针, ...

  6. js不常用,但很实用的功能

    =============== 通知: 博主已迁至<掘金>码字,博客园可能以后不再更新,掘金地址:https://juejin.im/post/5a1a6a6551882534af25a8 ...

  7. Java中对象的比较(学习笔记)

    1)详细说明对象的比较方式有哪些? ①对象引用的比较("= ="运算符) "= ="是将对象的引用进行比较,实质是比较两个引用变量是否引用同一个对象.注意的点: ...

  8. 跟UI自动化测试有关的技术

    大家都知道,针对UI的自动化技术一般要支持下列的东西: 1. 识别窗口   能够识别尽量多的窗口种类,支持尽量多的UI技术.比如Win32.WinForm.WPF以及WebPage(这个比较特殊,确切 ...

  9. bytes与网络通信

    字符串是人机交互的符号: bytes是最接近计算机本身的信息表示方法. 网络通信是计算机与计算机之间的通信. 所有的通信信息,必须转化为bytes流的方式在计算机间传递. bytes与数据类型无关,与 ...

  10. docker for windows pull镜像文件的安装位置

    结论: 所有放入镜像文件都放在虚拟硬盘文件里面. windows上安装的docker其实本质上还是借助与windows平台的hyper-v技术来创建一个linux虚拟机,你执行的所有命令其实都是在这个 ...