当前位置: 首页 > news >正文

贵州网站建设费用西部网站管理助手 伪静态

贵州网站建设费用,西部网站管理助手 伪静态,上海网站建设定制公,wordpress还是自己写mutate 插件可以在字段上执行变换#xff0c;包括重命名、删除、替换和修改。这个插件相当常用。 比如#xff1a; 你已经根据 Grok 表达式将 Tomcat 日志的内容放到各个字段中#xff0c;想把状态码、字节大小或是响应时间#xff0c;转换成整型#xff1b;你已经根据正则… mutate 插件可以在字段上执行变换包括重命名、删除、替换和修改。这个插件相当常用。 比如 你已经根据 Grok 表达式将 Tomcat 日志的内容放到各个字段中想把状态码、字节大小或是响应时间转换成整型你已经根据正则表达式将日志内容放到各个字段中但是字段的值大小写都有这对于 Elasticsearch 的全文检索来说显然用处不大那么可以用该插件将字段内容全部转换成小写。语法 该插件必须是用 mutate 包裹如下所示 mutate {} 可用的配置选项如下表所示 设置输入类型是否必填默认值add_fieldhashNo{}add_tagarrayNo[]converthashNogsubarrayNojoinhashNolowercasearrayNomergehashNoperiodic_flushbooleanNofalseremove_fieldarrayNo[]remove_tagarrayNo[]renamehashNoreplacehashNosplithashNostriparrayNoupdatehashNouppercasearrayNo其中add_field、remove_field、add_tag、remove_tag 是所有 Logstash 插件都有。它们在插件过滤成功后生效。虽然 Logstash 叫过滤但不仅仅过滤功能。 tag 作用是当你对字段处理期间还期望进行后续处理就先作个标记。Logstash 有个内置 tags 数组包含了期间产生的 tag无论是 Logstash 自己产生的还是你添加的比如你用 grok 解析日志但是错了那么 Logstash 自己就会自己添加一个 _grokparsefailure 的 tag。这样你在 output 时可以对解析失败的日志不做任何处理 而 field 作用是对字段的操作比如你想利用已有的字段创建新的字段。这些在后面再说。 另外你会发现上表中所有选项要么是动词要么是动宾短语。估计你也猜到了选项其实就是 ruby 函数而它们后面即“”跟着的肯定是一堆参数要是你写程序你也会这么干。第一个参数肯定是字段也就是你期望该函数作用在哪个字段上从第二个字段开始往后是具体参数~ 什么是字段比如你想解析 Tomcat 日志把一行访问日志拆分后得到客户端IP、字节大小、响应时间等放到指定变量那么这个变量就是字段。 下面具体介绍各个选项。 测试数据 假设有 Tomcat access 日志 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET /goLogin 8080 200 1692 23 http://10.1.8.193:8080/goMain Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET /js/common/jquery-1.10.2.min.js 8080 304 - 67 http://10.1.8.193:8080/goLogin Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET /css/common/login.css 8080 304 - 75 http://10.1.8.193:8080/goLogin Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET /js/system/login.js 8080 304 - 53 http://10.1.8.193:8080/goLogin Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0 它是按如下 Tomcat 配置产生的 Valve classNameorg.apache.catalina.valves.AccessLogValve directorylogs prefixlocalhost_access_log. suffix.txt pattern%h %l %u %t %m quot;%Uquot; quot;%qquot; %p %s %b %D quot;%{Referer}iquot; quot;%{User-Agent}iquot; / 若用如下 Grok 表达式解析该日志 %{IPORHOST:clientip} %{NOTSPACE:identd} %{NOTSPACE:auth} \[%{HTTPDATE:timestamp}\] %{WORD:http_method} %{NOTSPACE:request} %{NOTSPACE:request_query|-} %{NUMBER:port} %{NUMBER:statusCode} (%{NOTSPACE:bytes}|-) %{NUMBER:reqTime} %{QS:referer} %{QS:userAgent} 会得到如下结果 { message 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET \/goLogin\ \\ 8080 200 1692 23 \http://10.1.8.193:8080/goMain\ \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, version 1, timestamp 2016-05-17T08:26:07.794Z, host vcyber, clientip 192.168.6.25, identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/goLogin\, request_query \\, port 8080, statusCode 200, bytes 1692, reqTime 23, referer \http://10.1.8.193:8080/goMain\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\ } 注意日志拆分到各个字段后的数据类型。port、statusCode、bytes、reqTime 字段肯定是最好是数字不过这里暂时先用字符串。后面会介绍下面的示例都在此基础上。 可配置选项 add_field 值是散列就是键值对比如 add_field {field1value1,field2value2}。默认值是空对象即 {} 添加新的字段。 示例 input { stdin { } } filter { grok { match[message,%{IPORHOST:clientip} %{NOTSPACE:identd} %{NOTSPACE:auth} \[%{HTTPDATE:timestamp}\] %{WORD:http_method} %{NOTSPACE:request} %{NOTSPACE:request_query|-} %{NUMBER:port} %{NUMBER:statusCode} (%{NOTSPACE:bytes}|-) %{NUMBER:reqTime} %{QS:referer} %{QS:userAgent}] } mutate { add_field{ SayHiHello , %{clientip} } } } output{ stdout{ codecrubydebug } } 注意黑体部分如果用这个配置解析前面的 Tcomat access 日志会得到如下结果 { message 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET \/goLogin\ \\ 8080 200 1692 23 \http://10.1.8.193:8080/goMain\ \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, version 1, timestamp 2016-05-17T04:52:02.031Z, host vcyber, clientip 192.168.6.25, identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/goLogin\, request_query \\, port 8080, statusCode 200, bytes 1692, reqTime 23, referer \http://10.1.8.193:8080/goMain\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, SayHi Hello , 192.168.6.25 } 你会看到多了一个 SayHi 字段。这个字段是写死的当然也可以动态。如果将 SayHiHello , %{clientip} 改成 another_%{clientip}Hello , %{clientip} 你会看到如下结果 { message 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET \/goLogin\ \\ 8080 200 1692 23 \http://10.1.8.193:8080/goMain\ \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, version 1, timestamp 2016-05-17T06:38:04.427Z, host vcyber, clientip 192.168.6.25, identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/goLogin\, request_query \\, port 8080, statusCode 200, bytes 1692, reqTime 23, referer \http://10.1.8.193:8080/goMain\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, another_192.168.6.25 Hello , 192.168.6.25 } 虽然这个例子不太合理但你现在知道用已有字段的值可以生成新的字段和它的值。上面示例只添加了一个字段你也可以添加多个字段 add_field{ another_%{clientip}Hello , %{clientip} another_%{http_method}Hello, %{http_method} } add_tag 值是 array 数组默认值为空数组即 [] 添加新的标签。 示例 mutate { add_tag[ foo_%{clientip} ] } 你会看到如下结果 { message 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET \/goLogin\ \\ 8080 200 1692 23 \http://10.1.8.193:8080/goMain\ \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, version 1, timestamp 2016-05-17T06:48:43.278Z, host vcyber, clientip 192.168.6.25, identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/goLogin\, request_query \\, port 8080, statusCode 200, bytes 1692, reqTime 23, referer \http://10.1.8.193:8080/goMain\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, tags [ [0] foo_192.168.6.25 ] } 与 add_field 类似也可以一次添加多个 tags。 注意add_tag 是数组 []不是 {}。 convert 值是 hash无默认值 数据类型转换。 如果要转换成 boolean那么可接受的数据是 true, t, yes, y, 和 1false, f, no, n, 和 0 另外还可转换成 integer, float, string。 示例 mutate { #convert[reqTime,integer,statusCode,integer,bytes,integer] convert{portinteger} } convert 有两种写法。一种是用数组两个为一组另一种是散列。得到如下结果 { message 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET \/goLogin\ \\ 8080 200 1692 23 \http://10.1.8.193:8080/goMain\ \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, version 1, timestamp 2016-05-17T09:06:25.360Z, host vcyber, clientip 192.168.6.25, identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/goLogin\, request_query \\, port 8080, statusCode 200, bytes 1692, reqTime 23, referer \http://10.1.8.193:8080/goMain\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\ } 注意 port 字段已经没有双引号啦。mutate 插件选项的值类型设计得很简单要么是散列键值对要么数组……比如convert[reqTime,integer,statusCode,integer]两个为一组第一个表示字段第二个为想转换的数据类型并没有采用嵌套或是复合类型。看来作者的意图是——简单复杂的数据类型虽然看起来容易但要付出成本的。简单没关系约定好就行。Logstash 很多插件和其选项都这样。gsub 值是 array 数组无默认值 字符串替换。用正则表达式和字符串都行。它只能用于字符串如果不是字符串那么什么都不会做也不会报错。 该配置的值是数组三个为一组分别表示字段名称待匹配的字符串或正则表达式待替换的字符串。 示例在解析 Tomcat 日志会遇到一种情况资源的字节大小可能会是“-”因此需要将“-”替换成0然后在用convert转换成数字型。 input { stdin { } } filter { grok { match[message,%{IPORHOST:clientip} %{NOTSPACE:identd} %{NOTSPACE:auth} \[%{HTTPDATE:timestamp}\] %{WORD:http_method} %{NOTSPACE:request} %{NOTSPACE:request_query|-} %{NUMBER:port} %{NUMBER:statusCode} (%{NOTSPACE:bytes}|-) %{NUMBER:reqTime} %{QS:referer} %{QS:userAgent}] } mutate { gsub[bytes,_,0] convert[port,integer,reqTime,integer,statusCode,integer,bytes,integer] } } output{ stdout{ codecrubydebug } } 得到如下结果 { message 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET \/js/common/jquery-1.10.2.min.js\ \\ 8080 304 - 67 \http://10.1.8.193:8080/goLogin\ \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, version 1, timestamp 2016-05-17T09:17:21.745Z, host vcyber, clientip 192.168.6.25, identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/js/common/jquery-1.10.2.min.js\, request_query \\, port 8080, statusCode 304, bytes 0, reqTime 67, referer \http://10.1.8.193:8080/goLogin\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\ } join 值是 hash无默认值 用分隔符连接数组. 如果字段不是数组那什么都不做。 示例 filter {mutate {join {fieldname,}}} lowercase 和 uppercase 值是数组 array没有默认值 把字符串转换成小写或大写。 示例 filter { mutate { lowercase [fieldname]}} 示例 filter { mutate { uppercase [fieldname]}} merge 值是 hash无默认值 合并两个数组或散列字段。存在三种情况合并后是数组 数组和字符串可以合并字符串和字符串可以合并数组和散列不能合并 示例 mutate { add_field{arr_clientip%{clientip}} add_field{arrmstr_clientip%{clientip}} add_field{arrmarr_clientip%{clientip}} #merge{merge_clientipclientip} } mutate { split{arr_clientip.} split{arrmstr_clientip.} split{arrmarr_clientip.} } mutate { merge{arrmstr_clientipclientip} merge{arrmarr_clientiparr_clientip} } 后面的字段值会合并到前面的字段。 得到如下结果 { message 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET \/goLogin\ \\ 8080 200 1692 23 \http://10.1.8.193:8080/goMain\ \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, version 1, timestamp 2016-05-18T02:53:35.671Z, host vcyber, clientip 192.168.6.25, identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/goLogin\, request_query \\, port 8080, statusCode 200, bytes 1692, reqTime 23, referer \http://10.1.8.193:8080/goMain\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, arr_clientip [ [0] 192, [1] 168, [2] 6, [3] 25 ], arrmstr_clientip [ [0] 192, [1] 168, [2] 6, [3] 25, [4] 192.168.6.25 ], arrmarr_clientip [ [0] 192, [1] 168, [2] 6, [3] 25, [4] 192, [5] 168, [6] 6, [7] 25 ] } periodic_flush 值是 boolean默认值是 false 按时间间隔调用。可选。 remove_field 值是数组 array默认值是数组 [] 移除字段。 示例移除 message 字段。 mutate { remove_field[message] } 得到如下结果 { version 1, timestamp 2016-05-18T02:04:16.879Z, host vcyber, clientip 192.168.6.25, identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/goLogin\, request_query \\, port 8080, statusCode 200, bytes 1692, reqTime 23, referer \http://10.1.8.193:8080/goMain\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\ } message 字段已经没有了~message 字段保存了原始日志如果保留的话就意味着日志存了两份分割前和分割后。 当然也可以一次移除多个字段。 remove_tag 值是数组 array默认值是 [] 移除标识。 示例 filter { mutate { remove_tag [foo_%{somefield}]}} 也可以一次移动多个 tag filter { mutate { remove_tag [foo_%{somefield},sad_unwanted_tag]}} rename 值是 hash无默认值 重命名一个或多个字段。 示例: input { stdin { } } filter { grok { match[message,%{IPORHOST:clientip} %{NOTSPACE:identd} %{NOTSPACE:auth} \[%{HTTPDATE:timestamp}\] %{WORD:http_method} %{NOTSPACE:request} %{NOTSPACE:request_query|-} %{NUMBER:port} %{NUMBER:statusCode} (%{NOTSPACE:bytes}|-) %{NUMBER:reqTime} %{QS:referer} %{QS:userAgent}] } mutate { rename{clientiphost} } } output{ stdout{ codecrubydebug } } 得到如下结果 { message 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET \/goLogin\ \\ 8080 200 1692 23 \http://10.1.8.193:8080/goMain\ \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, version 1, timestamp 2016-05-17T09:29:44.018Z, host 192.168.6.25, identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/goLogin\, request_query \\, port 8080, statusCode 200, bytes 1692, reqTime 23, referer \http://10.1.8.193:8080/goMain\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\ } Grok 里客户端IP本来叫 clientip但是可以在 mutate 里重新命名为 host。 replace 值是 hash无默认值 用一个新的值替换掉指定字段的值。 示例 input { stdin { } } filter { grok { match[message,%{IPORHOST:clientip} %{NOTSPACE:identd} %{NOTSPACE:auth} \[%{HTTPDATE:timestamp}\] %{WORD:http_method} %{NOTSPACE:request} %{NOTSPACE:request_query|-} %{NUMBER:port} %{NUMBER:statusCode} (%{NOTSPACE:bytes}|-) %{NUMBER:reqTime} %{QS:referer} %{QS:userAgent}] } mutate { replace{message%{clientip}: My new Message.} } } output{ stdout{ codecrubydebug } } 得到如下结果 { message 192.168.6.25: My new Message., version 1, timestamp 2016-05-18T01:55:34.566Z, host vcyber, clientip 192.168.6.25, identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/goLogin\, request_query \\, port 8080, statusCode 200, bytes 1692, reqTime 23, referer \http://10.1.8.193:8080/goMain\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\ } message 字段的值已经变了。 split 值是 hash无默认值 用分隔符或字符分割一个字符串。只能应用在字符串上。 示例把客户端IP按英文句号分割成数组。 mutate { split{clientip.} } 得到如下结果 { message 192.168.6.25 - - [24/Apr/2016:01:25:53 0800] GET \/goLogin\ \\ 8080 200 1692 23 \http://10.1.8.193:8080/goMain\ \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\, version 1, timestamp 2016-05-18T01:58:40.687Z, host vcyber, clientip [ [0] 192, [1] 168, [2] 6, [3] 25 ], identd -, auth -, timestamp 24/Apr/2016:01:25:53 0800, http_method GET, request \/goLogin\, request_query \\, port 8080, statusCode 200, bytes 1692, reqTime 23, referer \http://10.1.8.193:8080/goMain\, userAgent \Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\ } strip 值是数组 array无默认值 去掉字段首尾的空格。 示例 filter { mutate { strip [field1,field2]}} update 值是 hash无默认值 Update an existing field with a new value. If the field does not exist, then no action will be taken. 示例 filter {mutate {update {sampleMy new message}}}
http://www.yutouwan.com/news/89873/

相关文章:

  • 罗湖网站建设罗湖网站设计有哪些网站可以做店面设计软件
  • 2021年关键词排名seo如何优化排名
  • 甘肃网站建设公司电话做网站只做前端可以用吗
  • html课程教学网站模板住房和城乡建设部网站行标
  • 厦门网站建设是什么网页版微信网址
  • 网络公司网站样本百度网站提交收录
  • 专业做家政网站只做同城交易的网站
  • 兰州网站建设q.479185700棒计算机网站开发国外参考文献
  • 政务网站建设信息怎么设置公司网址
  • 凤岗网站设计门户网站建设技术要求
  • 里水网站开发做网站公司松江
  • 企业网站备案域名信息陕西省建设监理协会查询官方网站
  • 珠宝企业的门户网站开发如何查询网站建设者
  • 网站建设外包给外企移动平台开发技术
  • 组建一个网站wordpress th7
  • 电商网页精品欣赏网站如何使用seo进行综合查询
  • 鄂州网站建设qq营销
  • 网站开发 html外贸邦官网
  • 泸州作网站建设联系电话上海企业网站模板建站费用
  • 临沂网站建设培训学校开发一个软件的流程是什么
  • 用python做网站不常见徐州seo关键词
  • 呼市赛罕区信息网站做一顿饭工作网站定位模板
  • 黄石网站建设wordpress登陆不上
  • 易进网站建设推广运城做网站公司
  • 菏泽做企业网站海门网站建设培训
  • 宣传型电子商务网站男人和女人做污的视频网站
  • 代做宝网站百度163黄页关键词挖掘
  • 备案查询站长之家中国纪检监察报电子版在线阅读
  • 网站建设免费模板下载中山 网站推广
  • 网络营销之网站建设wordpress获取文章所有标签