您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

ELK有坑,千万别踩

时间:2020-06-13 15:30:45  来源:  作者:

前言

起源许多年前,一个刚结婚的名叫 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进行展示

环境如下
elasticsearch master 10.5.2.175:9200
elasticsearch salve 10.5.2.176:9200
logstash 172.17.211.153 启动命令: nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/agent.conf -w 10 -l /usr/local/logstash/logs/logstash-plain.log &
nginx 
es-head: 172.16.211.143:9100
kibana: 172.16.211.143:5601

架构如下:

ELK有坑,千万别踩

 

加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根据条件进行搜索并对搜索到的数据进行展示,使我们看起来更加直观。

一、elasticsearch

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。

中文文档https://www.elastic.co/guide/cn/elasticsearch/guide/current/intro.html#intro

elasticsearch的安装

具体安装可以参考https://www.cnblogs.com/yanjieli/p/11187430.html这个教程,这里直说下配置和思路,首先懂思路,安装看教程就行。

需要有jdk环境
vim /etc/elasticsearch/jvm.options
2g
2g

1.vim /etc/elasticsearch/elasticsearch.yml
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.5.2.175","10.5.2.176"]
network.host: 10.5.2.175

2.vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

3.vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
* hard memlock unlimited
* soft memlock unlimited

4.vim /etc/sysconfig/elasticsearch
JAVA_HOME=/usr/java/jdk1.8.0_151

5.vim /usr/lib/systemd/system/elasticsearch.service
[Service]
LimitMEMLOCK=infinity

elasticsearch的问题

启动elasticsearch失败,报找不到JAVA环境,可明明系统是有的 解决方法如下:

vim /etc/sysconfig/elasticsearch
JAVA_HOME=/usr/java/jdk1.8.0_151

elasticsearch的概念

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?v

index 索引 相当于数据库里的“数据库” 他是我们存储和索引关联数据的地方

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 * from user where id = 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 * from user
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.16
export PATH=$PATH:$NODE_HOME/bin
source /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/
ELK有坑,千万别踩

 

问题解决:在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=Kibana
After=network.target

[Service]
ExecStart=/usr/local/kibana/bin/kibana
Type=simple
PIDFile=/usr/local/kibana/kibana.pid
Restart=always
#User=es 这里我直接使用root用户进行启动
#Group=es
[Install]
WantedBy=default.target

2. 重新加载一下配置文件
systemctl daemon-reload

3. 启动
systemctl start kibana.service

4. 访问测试
http://10.5.2.220:5601

查询语法

参考地址1 参考地址2 参考地址3https://blog.csdn.net/u013958257/article/details/88567581

kibana查询语法基于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. 数组范围查询
[7758794 TO 7758794] 表示等于,原意思是一个区间范围
指定区间: response:[100 TO 200]
大于等于指定数值的: response:[201 TO *]
小于等于指定数值的: response:[* TO 200]

3. 从指定时间到现在/或者查询指定时间前数据
2015-05-20T09:20:41.943Z之后的数据: @timestamp:{2015-05-20T09:20:41.943Z TO *}
2015-05-20T09:20:41.943Z之前的数据: @timestamp:{* TO 2015-05-20T09:20:41.943Z }
指定时间范围: @timestamp:{2015-05-20T09:20:41.943Z TO 015-05-22T09:20:41.943Z}
备注:09:20:41事实上是17:20:41,存在8个小时差

4. 正则匹配
包含指定值: request:/uploads*/
不包含指定值: !request:/uploads*/

5. 逻辑查询
AND(与关系数据库一样) request:/uploads*/ AND response:404
OR(与关系数据库一样) request:/uploads*/ OR response:200
组合查询: (uid OR token) AND version

6. 存在/不存在
存在host字段但不存在url字段: _exists_:host AND _missing_:url
特殊转义字符
+ – && || ! () {} [] ^” ~ * ? : 
ELK有坑,千万别踩

 

kibana创建索引模式(手动)

https://blog.csdn.net/weixin_34727238/article/details/81540692

当在els中有了当天的索引,就可以到kibana中取创建索引模式了,只是这里提供了一手动创建的方式,无法自动进行,需要本地定义脚本的方式进行自动索引的创建。

ELK有坑,千万别踩

 

等所有索引都创建完毕后,在下面就能看到了

ELK有坑,千万别踩

 

然后在下面这个里面就能看到我们的索引里面的数据情况了,前提是你的logstash成功将切割后的日志发送到了els中

ELK有坑,千万别踩

 

否则就是以下这种的

ELK有坑,千万别踩

 

kibana创建索引模式(自动)

由于logstash客户端运行的问题,只要有当天日志产生,就会将该日志发送给elasticsearch,然后会在elasticsearch里面产生一个新的索引
ELK有坑,千万别踩

 


ELK有坑,千万别踩

 

方法如下:

在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数据里变量要用''括起来
<font color=gray size=72>color=gray</font>

json数据里变量要用''括起来https://www.cnblogs.com/landhu/p/7048255.html

ELK 索引生命周期管理

问题解决

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

三、logstash

logstash和filebeat的对比

Filebeat是收集日志的另外一种方式,二者区别在于以下

Filebeat用于日志收集和传输,相比Logstash更加轻量级和易部署,对系统资源开销更小,日志流架构的话,Filebeat适合部署在收集的最前端,Logstash相比Filebeat功能更强,可以在Filebeat收集之后,由Logstash进一步做日志的解析,至于kafka也可以考虑添加,然后收集的数据都存放在elasticsearch中。

  1. logstash和filebeat都是可以作为日志采集的工具,目前日志采集的工具有很多种,如fluentd, flume, logstash,betas等等。甚至最后我决定用filebeat作为日志采集端工具的时候,还有人问我为什么不用flume,logstash等采集工具。
  2. logstash出现时间要比filebeat早许多,随着时间发展,logstash不仅仅是一个日志采集工具,它也是可以作为一个日志搜集工具,有丰富的input|filter|output插件可以使用。常用的ELK日志采集方案中,大部分的做法就是将所有节点的日志内容上送到kafka消息队列,然后使用logstash集群读取消息队列内容,根据配置文件进行过滤。上送到elasticsearch。logstash详细信息可前往https://www.elastic.co/
  3. logstash是使用Java编写,插件是使用jruby编写,对机器的资源要求会比较高,网上有一篇关于其性能测试的报告。之前自己也做过和filebeat的测试对比。在采集日志方面,对CPU,内存上都要比前者高很多。LogStash::Inputs::Syslog 性能测试与优化
  4. 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客户端的配置文件中会有这么一个配置文件

ELK有坑,千万别踩

 

就是会将日志发送到当天日期的索引汇总,没有的话自动创建索引,我们只需要做的就是每日删除旧的索引。

电子书教程推荐: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=5000m
directory=/opt/logstash
command=/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=5000m
directory=/opt/logstash
command=/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 子进程中某一个进程的启停操作:

supervisorctl stop 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 didn't match to a file
    file { "path" => "/tmp/grok_failures.txt" }
  } else {
     elasticsearch { }
  }
}

看下面红色的地方,表示grok匹配失败,才会将tags的标签定义成_grokparsefailure这个默认的

ELK有坑,千万别踩

 

解决说是要设置锚点 目前不懂什么意思 先放到这里

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



Tags:ELK   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Grafana Loki 是一个日志聚合工具,它是功能齐全的日志堆栈的核心。图片来自 包图网先看看结果有多轻量吧: Loki 是一个为有效保存日志数据而优化的数据存储。日志数据的高效索...【详细内容】
2021-09-14  Tags: ELK  点击:(97)  评论:(0)  加入收藏
在我们的服务器上通常会生成各种日志文件,比如系统日志、 应用日志、安全日志。当系统发生故障时,工程师需要登录到服务器上,在日志里查找故障原因。如果定位到处理请求的服务...【详细内容】
2021-06-01  Tags: ELK  点击:(159)  评论:(0)  加入收藏
开始之前先了解一下什么是ELK ELK:大型分布式日志分析系统ELK elasticsearch(存储日志)+logstash(收集日志)+kibana(展示数据)Elasticsearch:Elasticsearch (ES)是一个基于Luce...【详细内容】
2021-04-30  Tags: ELK  点击:(186)  评论:(0)  加入收藏
本文介绍使用docker安装部署Filebeat与Elasticsearch、Logstash、Kibana(简称ELK)全家桶7.5.1。如果熟悉框架的话,直接copy配置文件与docker命令,简单删减和修改路径,即可快速启...【详细内容】
2021-03-22  Tags: ELK  点击:(428)  评论:(0)  加入收藏
Loki 作为一个新兴的日志解决方案,现在越来越受到关注。经过调研比较,我们正在将日志服务底层逐步从 ES 替换为 Loki 。图片来自 Pexels本文基于我们对 Loki 的使用和理解,从它...【详细内容】
2020-12-23  Tags: ELK  点击:(143)  评论:(0)  加入收藏
一般提到监控,很多人就会想到监控服务器运行状态,网络运行状态。其实由于业务需要,服务器和网络设备每时每刻产生的海量日志也同样的重要。 为什么选用ELK? 首先我们来了解一下E...【详细内容】
2020-11-18  Tags: ELK  点击:(134)  评论:(0)  加入收藏
本篇主要讲工作中的真实经历,我们怎么打造亿级日志平台,同时手把手教大家建立起这样一套亿级 ELK 系统。日志平台具体发展历程可以参考上篇 「从 ELK 到 EFK 演进」废话不多...【详细内容】
2020-07-27  Tags: ELK  点击:(55)  评论:(0)  加入收藏
最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Lok...【详细内容】
2020-06-15  Tags: ELK  点击:(88)  评论:(0)  加入收藏
前言起源许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,...【详细内容】
2020-06-13  Tags: ELK  点击:(44)  评论:(0)  加入收藏
本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意义),生产环境请根据具体需...【详细内容】
2020-06-12  Tags: ELK  点击:(57)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条