sojson(sojson ip查询)学到了吗
直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。
阅读目录设计思路如下ELK的工作流程elasticsearch的安装elasticsearch的问题elasticsearch的概念elasticsearch的操作方法elasticsearch-head的安装
语言设置安装配置查询语法kibana创建索引模式(手动)kibana创建索引模式(自动)ELK 索引生命周期管理问题解决Kibana server is not ready yet出现的原因kibana可以做哪些分析
logstash和filebeat的对比自动创建elasticsearch的索引关于grok语法问题解决前言起源许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。
在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。
他发布了他的第一个开源项目 Compass后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。
第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors(目前736名 contributors )。
一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用据说,Shay 的妻子还在等着她的食谱搜索引擎…设计思路如下
有3台机器2台做elasticsearch的主副节点1台做kibana和elasticsearch_head 由于机器匮乏我还在这台机器上部署了logstash和nginx服务(虽然下面的架构中都提到了redis等缓存,但是暂时没有加该服务,后期会研究添加上的)
先说目的:将nginx的日志通过logstash收集后发送到ela,然后kibana进行展示环境如下elasticsearchmaster10.5.2.175:9200elasticsearchsalve
10.5.2.176:9200logstash172.17.211.153启动命令:nohup/usr/local/logstash/bin/logstash-f/usr/local/logstash/config/agent.conf
-w10-l/usr/local/logstash/logs/logstash-plain.log&nginxes-head:172.16.211.143:9100kibana:172.16.211.143
:5601架构如下:
加redis/kafa的原因:在生产环境中,我们的日志可能会有瞬时高峰,而这个时候如果直接存入es,可能会导致es承受不住,从而影响日志的收集和查询 一般情况下,我们会将日志存直接放到kafka或者redis这种读写性能非常高的应用中,作为一个缓存,然后通过下游组件(例如logstash)进行消费、过滤后存入ES,然后通过可视化界面查看。
ELK的工作流程logstash客户端收集到日志后将日志存入到redis之类的缓存中Logstash_server将数据从redis中提取出来并根据/usr/local/logstash/patterns下的文件(文件名随意取)这里叫grok-patterns里面根据不同的日志,比如apache、nginx服务规定的不同格式来进行切割,切割完毕后将日志存入到elastaicsearch中,格式里面的key vlaue值就是els中的字段和值
elastaicsearch对logstash_server发送过来的值进行集群保存,提供被调用接口以及快速的搜索服务(这里还可以安装分词插件,当做搜索引擎)kibana对es根据条件进行搜索并对搜索到的数据进行展示,使我们看起来更加直观。
一、elasticsearchElasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。
中文文档https://www.elastic.co/guide/cn/elasticsearch/guide/current/intro.html#introelasticsearch的安装具体安装可以参考
https://www.cnblogs.com/yanjieli/p/11187430.html这个教程,这里直说下配置和思路,首先懂思路,安装看教程就行需要有jdk环境vim/etc/elasticsearch/jvm.options。
2g2g1.vim/etc/elasticsearch/elasticsearch.ymlhttp.port:9200discovery.zen.ping.unicast.hosts:["10.5.2.175","10.5.2.176"]
network.host:10.5.2.1752.vim/etc/systemd/system.confDefaultLimitNOFILE=65536DefaultLimitNPROC=32000DefaultLimitMEMLOCK=infinity
3.vim/etc/security/limits.conf*softnofile65536*hardnofile65536*softnproc32000*hardnproc32000*hardmemlock
unlimited*softmemlockunlimited4.vim/etc/sysconfig/elasticsearchJAVA_HOME=/usr/java/jdk1.8.0_1515.vim/usr/lib/systemd/system/elasticsearch.service
[Service]LimitMEMLOCK=infinityelasticsearch的问题启动elasticsearch失败,报找不到JAVA环境,可明明系统是有的 解决方法如下:vim/etc/sysconfig/elasticsearch
JAVA_HOME=/usr/java/jdk1.8.0_151elasticsearch的概念index 索引 相当于数据库里的“数据库” 他是我们存储和索引关联数据的地方type 类数据 将一类的数据放到一起 相当于数据库中的“表”
id 相当于数据库表中的一行Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例单个 Elastic 实例称为一个节点(node)一组节点构成一个集群(cluster)。
Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)查找数据的时候,直接查找该索引倒排索引(反向索引)原始文档创建倒排索引列表倒排索引创建索引的流程:1) 首先把所有的原始数据进行编号,形成文档列表2) 把文档数据进行分词,得到很多的词条,以词条为索引。
保存包含这些词条的文档的编号信息搜索的过程:当用户输入任意的词条时,首先对用户输入的数据进行分词,得到用户要搜索的所有词条,然后拿着这些词条去倒排索引列表中进行匹配找到这些词条就能找到包含这些词条的所有文档的编号。
然后根据这些编号去文档列表中找到文档所以,Elastic 数据管理的顶层单位就叫做 Index(索引)它是单个数据库的同义词每个 Index (即数据库)的名字必须是小写下面的命令可以查看当前节点的所有 Index。
$ curl -X GET http://localhost:9200/_cat/indices?vindex 索引 相当于数据库里的“数据库” 他是我们存储和索引关联数据的地方type 类数据 将一类的数据放到一起 相当于数据库中的“表”
id 相当于数据库表中的一行pertty 在网页中格式化输出响应内容elasticsearch的操作方法官方教程在这里,我觉得这个更加实用官方教程 https://www.cnblogs.com/chuyuan/p/11380744.html
增# 增加 http://10.5.103.176:9200/database1/table1 { "name": "doudou", "age": 4.5, "weight": 20, }
# 查询# 以上方法是正确的 但是再增加一个table2的是否发生如下报错 http://10.5.103.176:9200/database1/table2 { "name": "dianche1"
, "weight": 1000 } 原因是elastic search在6.x版本调整了, 一个index只能存储一种type 查GET /atguigu/_mapping 1. 检索文档 Mysql : 。
select * fromuserwhereid = 1 ES : GET /atguigu/doc/1 响应结果 { "_index" : "megacorp", "_type" :
"employee", "_id" : "1", "_version" : 1, "found" : true, "_source" : { "first_name"
: "John", "last_name" : "Smith", "age" : 25, "about" : "I love to go rock climbing"
, "interests": [ "sports", "music" ] } } 2.简单检索 Mysql : select * fromuser ES : GET /megacorp/employee/_search
3.全文检索 ES : GET /megacorp/employee/_search?q=haha 查询出所有文档字段值为haha的文档 4.搜索(模糊查询) ES : GET /megacorp/employee/_search?q=hello 查询出所有文档字段值分词后包含hello的文档
5.聚合 PUT atguigu/_mapping/doc { "properties": { "interests": { "type": "text",
"fielddata": true } } } elasticsearch-head的安装ealsticsearch只是后端提供各种api,那么怎么直观的使用它呢?elasticsearch-head将是一款专门针对于elasticsearch的客户端工具,是es的集群管理工具、数据可视化、增删改查工具。
相关详细的教程在这里1 https://www.sojson.com/blog/85.html2 https://www.cnblogs.com/xuwenjin/p/8792919.html3 https://blog.csdn.net/huwei2003/article/details/40581143
一、下载head插件 https://github.com/mobz/elasticsearch-head 二、解压到任意目录 注意:为避免找不到,一定要和elasticsearch的安装目录区分开 三、安装Node.js 因为head是一个Node.js项目。
所以,如果没有安装nodejs需要先安装Node.js 32位安装包下载地址: https://nodejs.org/dist/v4.4.3/node-v4.4.3-x86.tar.gz 64位安装包下载地址: https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.tar.gz 检测PATH环境变量是否配置了Node.js,打开命令行输入命令"which npm",输出如下结果: /usr/bin/npm wget https://nodejs.org/dist/latest-v8.x/node-v8.16.0.tar.gz tar xf node-v8.16.0.tar.gz cd node-v8.16.0 ./configure 。
--prefix=/usr/local/node-v8.16 make -j 8 && make install 添加环境变量 vim /etc/profile ################nodejs###############
export NODE_HOME=/usr/local/node-v8.16exportPATH=$PATH:$NODE_HOME/binsource /etc/profile node -v v8.16
.0 npm -v 6.4.1 四、安装npm yum install npm -y 五、es-head安装: 解压源码包:elasticsearch-head.tar.gz 启动:cd /usr/
local/src/elasticsearch-head npm run start & 访问地址是http://{你的ip地址}:9200/_plugin/head/ 在浏览器中输入:这台机器的ip+端口
http://10.5.2.220:9100/
问题解决:在elasticsearch中没有当天的索引头一天使用过的bj日志第二天无法收集到,原因是昨天logstash已经收集过一遍,就被打过了标签,今天再使用的话,如果这个日志是不再增加的就不会被收集,因为日志中没有新的内容进来,解决方法如下:
在logstash的config文件下的agent.conf加入以下配置 start_position =>"beginning"#检查时间戳二、kibana语言设置vim config/kibana.yml i18n.locale:
"en" 或者zh-CN中文 systemctl restart kibana重启即可 安装配置重新加载systemctl配置,这个是针对centos7以上使用systemctl kibana restart命令的
systemctl daemon-reload 这里由于是二进制的安装方法,所以要设置一个systemctl start kibana.service的启动方法1.vim /usr/lib/systemd/system/kibana.service
添加以下内容[Unit]Description=KibanaAfter=network.target[Service]ExecStart=/usr/local/kibana/bin/kibanaType
=simplePIDFile=/usr/local/kibana/kibana.pidRestart=always#User=es 这里我直接使用root用户进行启动#Group=es[Install]
WantedBy=default.target2.重新加载一下配置文件systemctldaemon-reload3.启动systemctlstart kibana.service4.访问测试http:
//10.5.2.220:5601查询语法参考地址1 参考地址2 参考地址3https://blog.csdn.net/u013958257/article/details/88567581kibana查询语法基于Lucene
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。
Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。
Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻在Java开发环境里Lucene是一个成熟的免费开源工具就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。
人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆 Lucene最初是由Doug Cutting开发的,在SourceForge的网站上提供下载在2001年9月作为高质量的开源Java产品加入到Apache软件基金会的 Jakarta家族中 。
kibana在ELK阵营中用来查询展示数据elasticsearch构建在Lucene之上,过滤器语法和Lucene相同1.根据某个字段查询精确匹配:agent:"Mozilla/5.0"如果不带双引号,只要包含指定值就可以搜索到
agent:Mozilla/5.0如果是数值类型没有以上区别2.数组范围查询[7758794TO7758794]表示等于,原意思是一个区间范围指定区间:response:[100TO200]大于等于指定数值的:
response:[201TO*]小于等于指定数值的:response:[*TO200]3.从指定时间到现在/或者查询指定时间前数据2015-05-20T09:20:41.943Z之后的数据:@timestamp:{2015-05-20T09:20:41.943Z
TO*}2015-05-20T09:20:41.943Z之前的数据:@timestamp:{*TO2015-05-20T09:20:41.943Z}指定时间范围:@timestamp:{2015-05-20T09:20:41.943Z
TO015-05-22T09:20:41.943Z}备注:09:20:41事实上是17:20:41,存在8个小时差4.正则匹配包含指定值:request:/uploads*/不包含指定值:!request
:/uploads*/5.逻辑查询AND(与关系数据库一样)request:/uploads*/ANDresponse:404OR(与关系数据库一样)request:/uploads*/ORresponse:200
组合查询:(uidORtoken)ANDversion6.存在/不存在存在host字段但不存在url字段:_exists_:hostAND_missing_:url特殊转义字符+–&&||!(){}[]
^”~*?:\
kibana创建索引模式(手动)https://blog.csdn.net/weixin_34727238/article/details/81540692当在els中有了当天的索引,就可以到kibana中取创建索引模式了,只是这里提供了一手动创建的方式,无法自动进行,需要本地定义脚本的方式进行自动索引的创建。
等所有索引都创建完毕后,在下面就能看到了
然后在下面这个里面就能看到我们的索引里面的数据情况了,前提是你的logstash成功将切割后的日志发送到了els中
否则就是以下这种的
kibana创建索引模式(自动)由于logstash客户端运行的问题,只要有当天日志产生,就会将该日志发送给elasticsearch,然后会在elasticsearch里面产生一个新的索引
方法如下:在kibana节点上写一个脚本,然后设置定时任务执行kibana中索引与elasticsearch的关联 vim /usr/local/scripts/kibana_create_index.sh
#!/bin/bash today=`date +%Y-%m-%d` index_name="nginx-log-${today}.log" curl -X POST -H "kbn-xsrf:reporting"
-H "Content-Type: application/json" -d {"attributes":{"title":"$log_name"}}http://172.16.211.143:5601/api/saved_objects/index-pattern
这里遇到一个问题,json中调用变量的问题,一直调用不到,后来各种查询原来是格式不对 json数据里变量要用括起来 color=gray
json数据里变量要用括起来https://www.cnblogs.com/landhu/p/7048255.htmlELK 索引生命周期管理问题解决Kibana server is not ready yet出现的原因
第一点:KB、ES版本不一致(网上大部分都是这么说的)解决方法:把KB和ES版本调整为统一版本第二点:kibana.yml中配置有问题(通过查看日志,发现了Error: No Living connections的问题)
解决方法:将配置文件kibana.yml中的elasticsearch.url改为正确的链接,默认为: http://elasticsearch:9200改为http://自己的IP地址:9200第三点:浏览器没有缓过来
解决方法:刷新几次浏览器终极解决方法:在elasticsearch中删除kibana的相关索引,只是再打开kibana看不到其他了之前创建的图形什么的了kibana可以做哪些分析分析的必要性:顶级用户分布。
PV、UV状态码访问时间更多图形看这里https://www.cnblogs.com/hanyifeng/p/5860731.html比较牛逼一点的教程看这里https://www.bilibili.com/video/BV1TE411A77i?p=6
三、logstashlogstash和filebeat的对比Filebeat是收集日志的另外一种方式,二者区别在于以下Filebeat用于日志收集和传输,相比Logstash更加轻量级和易部署,对系统资源开销更小,日志流架构的话,Filebeat适合部署在收集的最前端,Logstash相比Filebeat功能更强,可以在Filebeat收集之后,由Logstash进一步做日志的解析,至于kafka也可以考虑添加,然后收集的数据都存放在elasticsearch中。
logstash和filebeat都是可以作为日志采集的工具,目前日志采集的工具有很多种,如fluentd, flume, logstash,betas等等甚至最后我决定用filebeat作为日志采集端工具的时候,还有人问我为什么不用flume,logstash等采集工具。
logstash出现时间要比filebeat早许多,随着时间发展,logstash不仅仅是一个日志采集工具,它也是可以作为一个日志搜集工具,有丰富的input|filter|output插件可以使用常用的ELK日志采集方案中,大部分的做法就是将所有节点的日志内容上送到kafka消息队列,然后使用logstash集群读取消息队列内容,根据配置文件进行过滤。
上送到elasticsearchlogstash详细信息可前往https://www.elastic.co/logstash是使用Java编写,插件是使用jruby编写,对机器的资源要求会比较高,网上有一篇关于其性能测试的报告。
之前自己也做过和filebeat的测试对比在采集日志方面,对CPU,内存上都要比前者高很多LogStash::Inputs::Syslog 性能测试与优化filebeat也是elastic.公司开发的,其官方的说法是为了替代logstash-forward。
采用go语言开发代码开源elastic/beats filebeat是beats的一个文件采集工具,目前其官方基于libbeats平台开发的还有Packetbeat, Metricbeat, Winlogbeat。
filebeat性能非常好,部署简单是一个非常理想的文件采集工具我自己采集工具也是基于beats源码进行的二次开发https://blog.csdn.net/m0_38120325/article/details/79072921
自动创建elasticsearch的索引在logstash客户端的配置文件中会有这么一个配置文件
就是会将日志发送到当天日期的索引汇总,没有的话自动创建索引,我们只需要做的就是每日删除旧的索引电子书教程推荐:http://doc.yonyoucloud.com/doc/logstash-best-practice-cn/get_start/introduction.html。
启动方法基于最基础的 nohup 方式nohup/usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/agent.conf &> /dev/null
也可以用daemontools来进行管理安装yum-y install supervisord --enablerepo=epel在/etc/supervisord.conf 配置文件里添加内容,定义你要启动的程序:
[program:elkpro_1]environment=LS_HEAP_SIZE=5000mdirectory=/opt/logstashcommand=/opt/logstash/bin/logstash -f /etc/logstash/pro1.conf --pluginpath /opt/logstash/plugins/ -w 10 -l /var/log/logstash/pro1.log
[program:elkpro_2]environment=LS_HEAP_SIZE=5000mdirectory=/opt/logstashcommand=/opt/logstash/bin/logstash -f /etc/logstash/pro2.conf --pluginpath /opt/logstash/plugins/ -w 10 -l /var/log/logstash/pro2.log
然后启动service supervisord start 即可logstash会以 supervisord 子进程的身份运行,你还可以使用 supervisorctl 命令,单独控制一系列 logstash 子进程中某一个进程的启停操作:。
supervisorctlstop elkpro_2关于grok语法官方给定的语法https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
https://github.com/elastic/logstash/tree/v1.4.2/patterns如果你使用的正则语言可以将nginx日志进行匹配,就可以成功对日志进行切割,效果看下图:调试的过程中可以使用这个网站来进行正则语法的测试:
http://grokdebug.herokuapp.com/1. 线上配置的信息格式192.168.70.94 跟权威指南中的一样 SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp}
(?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource}%{SYSLOGPROG}: 以下这个是Logstash默认自带了Apache标准日志的grok正则表达式: COMMONAPACHELOG
%{IPORHOST:clientip}%{USER:ident}%{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest })"
%{NUMBER:response} (?:%{NUMBER:bytes}|-) COMBINEDAPACHELOG %{COMMONAPACHELOG}%{QS:referrer}%{QS:agent}
2. 我的nginx日志切割格式 NGINX_ACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{HTTPDATE:tiem_local}
\] \"%{DATA:request}\" %{INT:status} %{NUMBER:bytes_sent} \"%{DATA:http_referer}\" \"%{DATA:http_user_agent}\" MAINNGINXLOG %{COMBINEDAPACHELOG} %{QS:x_forwarded_for}
COMBINEDAPACHELOG合并的apache日志 logstash客户端用的是这种方式COMMONAPACHELOG普通的apache日志当grok匹配失败的时候,插件会为这个事件打个tag,默认是_grokparsefailure。
LogStash允许你把这些处理失败的事件路由到其他地方做后续的处理 input { # ... } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{IPV4:ip};%{WORD:environment}\] %{LOGLEVEL:log_level} %{GREEDYDATA:message}"
} } } output { if"_grokparsefailure" in [tags] { # write events that didnt match to a file file {
"path" => "/tmp/grok_failures.txt" } } else { elasticsearch { } } } 看下面红色的地方,表示grok匹配失败,才会将tags的标签定义成_grokparsefailure这个默认的
解决说是要设置锚点 目前不懂什么意思 先放到这里https://www.jianshu.com/p/86133dd66ca4另外一种说法,暂时不会用,先放着 1. if"_grokparsefailure"
in [tags] { drop { } } 2.match语句跟第一个一样的 没啥要点,看着官网例子搞就行了 3.尽量用grok吧 ,grep功能以后要去掉的 当时想的另外一种解决方法就是改nginx的日志格式成json形式的,但是我不想用这种方法。
log_format json {"@timestamp":"$time_iso8601","host":"$server_addr","clientip":"$remote_addr","request":"
$request","status":"$status","request_method": "$request_method","size":"$body_bytes_sent","request_time":"
$request_time","upstreamtime":"$upstream_response_time","upstreamhost":"$upstream_addr","http_host":"
$host","url":"$uri","http_forward":"$http_x_forwarded_for","referer":"$http_referer","agent":"$http_user_agent
"}; access_log /var/log/nginx/access.log json ; 问题解决Nginx日志没有被成功切割的终极原因 以下是两种日志方式: log_format main
$remote_addr - $remote_user [$time_iso8601] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$host" "$request_time"
; log_format format2 $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer"
"$http_user_agent" "$http_x_forwarded_for" "$host" "$request_time"; 在logstash中进行切割的时候调用的时间变量是不同的,灵感来自如下: grok { match => {
"message" => "%{TIMESTAMP_ISO8601:time}" } } date{ match => ["time", "yyyy-MM-dd HH:mm:ss"
, "ISO8601"] target => "@timestamp" } mutate{ remove_field => ["time"] } 定义: HTTPDATE
%{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME}%{INT} TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}
:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? #NGINX_ACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{HTTPDATE:time_iso8601}\] \"%{DATA:request}\" %{INT:status} %{NUMBER:bytes_sent} \"%{DATA:http_referer}\" \"%
{DATA:http_user_agent}\" {DATA:http_user_agent}\" NGINX_ACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{TIMESTAMP_ISO8601:time_iso8601}\] \"%{DATA:request}\" %{INT:status} %{NUMBER:bytes_sent} \"%{DATA:http_refere r}\" \"%{DATA:http_user_agent}\" SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}: COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "
(?:%{WORD:verb}%{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest })" %{NUMBER:response} (?:%{NUMBER:bytes}|
-) COMBINEDAPACHELOG %{COMMONAPACHELOG}%{QS:referrer}%{QS:agent} Nginx中时间格式1:$time_local 对应logstash中\[
%{HTTPDATE:timestamp}\] Nginx中时间格式2:$time_iso8601 对应logstash中\[%{TIMESTAMP_ISO8601:timestamp}\] 作者:思绸之路
链接:https://www.cnblogs.com/zanao/p/13072595.html
- 标签:
- 编辑:李松一
- 相关文章
-
南京长江大桥(南京长江大桥旅游攻略)这样也行?
随着我国的建筑技术不断地发展,中国桥梁已经成为了我们中国的一个标志,不断地令全球网友们惊叹,这些超级桥梁工程不仅便利了交通,亦装…
-
mydrivers(mydrivers是什么文件夹可以删除吗)学到了
drivers文件夹的含义是驱动程序,用于存储驱动程序文件。如果它是C:Windowssystem32drivers文件夹,则它是Win7系统驱…
- 安得广厦千万间(安得广厦千万间全诗)深度揭秘
- 复制(复制浏览器打开下载app)这都可以
- 不到长城非好汉(不到长城非好汉在八达岭长城哪里)干货分享
- 不到长城非好汉(不到长城非好汉在八达岭长城哪里)难以置信
- 量化投资(量化投资什么意思)真没想到