elk英语是什么意思,elk发音的单词

阅读目录设计思路如下ELK的工作流程elasticsearch的安装elasticsearch的问题elasticsearch的概念elasticsearch的操作方法elasticsearch-he

阅读目录

设计思路如下

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台机器

elk英语音标:英 [ɛlk] ;美 [ɛlk] 。短语搭配:elk hound挪威猎犬。Irish elk爱尔兰巨鹿。例句:A pack of wolves typically kills an elk every two to three days.通常情况下,一群狼必须每两到三天。

2台做elasticsearch的主副节点

elk,英语单词,主要用作名词,在英式英语和美式英语中词义不同。在英式英语中义为“驼鹿”,在美式英语中义为“马鹿(美洲赤鹿)”。a large deer with brownish-red fur and large antlers (= horns like branches) tha。

1台做kibana和elasticsearch_head 由于机器匮乏我还在这台机器上部署了logstash和nginx服务(虽然下面的架构中都提到了redis等缓存,但是暂时没有加该服务,后期会研究添加上的)

先说目的:将nginx的日志通过logstash收集后发送到ela,然后kibana进行展示

elk英语是什么意思

环境如下elasticsearch master 10.5.2.175:9200elasticsearch salve 10.5.2.176:9200logstash 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: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根据条件进行搜索并对搜索到的数据进行展示,使我们看起来更加直观。

一、elasticsearch

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

中文文档

elasticsearch的安装

需要有jdk环境vim /etc/elasticsearch/jvm.options2g2g1.vim /etc/elasticsearch/elasticsearch.ymlhttp.port: 9200discovery.zen.ping.unicast.hosts: [&34;,&34;]network.host: 10.5.2.1752.vim /etc/systemd/system.confDefaultLimitNOFILE=65536DefaultLimitNPROC=32000DefaultLimitMEMLOCK=infinity3.vim /etc/security/limits.conf* soft nofile 65536* hard nofile 65536* soft nproc 32000* hard nproc 32000* hard memlock unlimited* soft memlock unlimited4.vim /etc/sysconfig/elasticsearchJAVA_HOME=/usr/java/jdk1.8.0_1515.vim /usr/lib/systemd/system/elasticsearch.service[Service]LimitMEMLOCK=infinity

elasticsearch的问题

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

vim /etc/sysconfig/elasticsearchJAVA_HOME=/usr/java/jdk1.8.0_151

elasticsearch的概念

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

type 类数据 将一类的数据放到一起 相当于数据库中的“表”

id 相当于数据库表中的一行

Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。

Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。倒排索引(反向索引)原始文档创建倒排索引列表倒排索引创建索引的流程:1) 首先把所有的原始数据进行编号,形成文档列表2) 把文档数据进行分词,得到很多的词条,以词条为索引。保存包含这些词条的文档的编号信息。搜索的过程:当用户输入任意的词条时,首先对用户输入的数据进行分词,得到用户要搜索的所有词条,然后拿着这些词条去倒排索引列表中进行匹配。找到这些词条就能找到包含这些词条的所有文档的编号。然后根据这些编号去文档列表中找到文档

所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。

英[elk]美[elk]驼鹿,麋鹿(生活于北欧和亚洲,北美洲称moose);(美国)厄尔克思慈善互助会会员(捐款给慈善机构)。Apreliminaryinspectionontheelk(alcesalces)inXinjiangAltaiMountain.新疆阿尔泰山驼鹿的初步考察。Deerandelk。

下面的命令可以查看当前节点的所有 Index。

$ curl -X GET 'http://localhost:9200/_cat/indices?v

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

type 类数据 将一类的数据放到一起 相当于数据库中的“表”

id 相当于数据库表中的一行

pertty 在网页中格式化输出响应内容

elasticsearch的操作方法

官方教程在这里,我觉得这个更加实用官方教程

34;name&34;doudou&34;age&34;weight& 查询34;name&34;dianche1&34;weight": 1000}原因是elastic search在6.x版本调整了, 一个index只能存储一种type。

GET /atguigu/_mapping1. 检索文档Mysql : select * from user where id = 1ES : GET /atguigu/doc/1响应结果{&34; : &34;, &34; :&34;, &34; :&34;, &34; : 1, &34; :true, &34; :{&34; :&34;, &34; : &34;, &34; : 25, &34; : &34;, &34;:[ &34;,&34; ]}}2.简单检索Mysql : select * from userES : GET /megacorp/employee/_search3.全文检索ES : GET /megacorp/employee/_search?q=haha查询出所有文档字段值为haha的文档4.搜索(模糊查询)ES : GET /megacorp/employee/_search?q=hello查询出所有文档字段值分词后包含hello的文档5.聚合PUT atguigu/_mapping/doc{ &34;: { &34;: { &34;: &34;,&34;: true } }}

elasticsearch-head的安装

一、下载head插件、解压到任意目录注意:为避免找不到,一定要和elasticsearch的安装目录区分开三、安装Node.js因为head是一个Node.js项目。所以,如果没有安装nodejs需要先安装Node.js32位安装包下载地址: : ,打开命令行输入命令&34;,输出如下结果:/usr/bin/npmwgetxf node-v8.16.0.tar.gzcd node-v8.16.0./configure --prefix=/usr/local/node-v8.16make -j 8 && make install添加环境变量vim /etc/profile##export NODE_HOME=/usr/local/node-v8.16export PATH=$PATH:$NODE_HOME/binsource /etc/profilenode -vv8.16.0npm -v6.4.1四、安装npm yum install npm -y五、es-head安装:解压源码包:elasticsearch-head.tar.gz启动:cd /usr/local/src/elasticsearch-headnpm run start &访问地址是http://{你的ip地址}:9200/_plugin/head/在浏览器中输入:这台机器的ip+端口

问题解决:在elasticsearch中没有当天的索引

头一天使用过的bj日志第二天无法收集到,原因是昨天logstash已经收集过一遍,就被打过了标签,今天再使用的话,如果这个日志是不再增加的就不会被收集,因为日志中没有新的内容进来,解决方法如下:

在logstash的config文件下的agent.conf加入以下配置start_position =>&34;34;en" 或者zh-CN中文systemctl restart kibana重启即可

安装配置

systemctl daemon-reload

这里由于是二进制的安装方法,所以要设置一个systemctl start kibana.service的启动方法

查询语法

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:&34;如果不带双引号,只要包含指定值就可以搜索到 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:404OR(与关系数据库一样) request:/uploads*/ OR response:200组合查询: (uid OR token) AND version6. 存在/不存在存在host字段但不存在url字段: _exists_:host AND _missing_:url特殊转义字符+ – && || ! () {} [] ^” ~ * ? : \

kibana创建索引模式(手动)

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

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

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

否则就是以下这种的

kibana创建索引模式(自动)

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

方法如下:

在kibana节点上写一个脚本,然后设置定时任务执行kibana中索引与elasticsearch的关联vim /usr/local/scripts/kibana_create_index.sh34;nginx-log-${today}.log&34;kbn-xsrf:reporting&34;Content-Type: application/json&39;{&34;:{&34;:&39;$log_name&34;}}&39;;这里遇到一个问题,json中调用变量的问题,一直调用不到,后来各种查询原来是格式不对json数据里变量要用&39;括起来<font color=gray size=72>color=gray</font>

json数据里变量要用&39;括起来

ELK 索引生命周期管理

问题解决

Kibana server is not ready yet出现的原因

n. 麋鹿;[例句]Elk and deer are gone.麋鹿没了,野鹿没了。[其他] 复数:elks 中文谐音:诶儿客 问题四:“麋鹿”的英文怎么写??? deer 问题五:麋鹿英语怎么写 elk 问题六:麋鹿的英文翻译 Père David's。

第一点:KB、ES版本不一致(网上大部分都是这么说的)

解决方法:把KB和ES版本调整为统一版本

第二点:kibana.yml中配置有问题(通过查看日志,发现了Error: No Living connections的问题)

解决方法:将配置文件kibana.yml中的elasticsearch.url改为正确的链接,默认为: http://elasticsearch:9200

改为http://自己的IP地址:9200

第三点:浏览器没有缓过来

解决方法:刷新几次浏览器。

kibana可以做哪些分析

分析的必要性:顶级

用户分布

PV、UV

状态码

访问时间

更多图形看这里

比较牛逼一点的教程看这里

三、logstash

logstash和filebeat的对比

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

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

logstash和filebeat都是可以作为日志采集的工具,目前日志采集的工具有很多种,如fluentd,flume,logstash,betas等等。甚至最后我决定用filebeat作为日志采集端工具的时候,还有人问我为什么不用flume,logstash等采集工具。

elk 英[elk] 美[ɛlk]n. 麋鹿;[例句]Elk and deer are gone.麋鹿没了,野鹿没了。[其他] 复数:elks 中文谐音:诶儿客

logstash出现时间要比filebeat早许多,随着时间发展,logstash不仅仅是一个日志采集工具,它也是可以作为一个日志搜集工具,有丰富的input|filter|output插件可以使用。常用的ELK日志采集方案中,大部分的做法就是将所有节点的日志内容上送到kafka消息队列,然后使用logstash集群读取消息队列内容,根据配置文件进行过滤。上送到elasticsearch。logstash详细信息可前往

logstash是使用Java编写,插件是使用jruby编写,对机器的资源要求会比较高,网上有一篇关于其性能测试的报告。之前自己也做过和filebeat的测试对比。在采集日志方面,对CPU,内存上都要比前者高很多。LogStash::Inputs::Syslog 性能测试与优化

filebeat也是elastic.公司开发的,其官方的说法是为了替代logstash-forward。采用go语言开发。代码开源。elastic/beats filebeat是beats的一个文件采集工具,目前其官方基于libbeats平台开发的还有Packetbeat, Metricbeat, Winlogbeat。filebeat性能非常好,部署简单。是一个非常理想的文件采集工具。我自己采集工具也是基于beats源码进行的二次开发。

自动创建elasticsearch的索引

在logstash客户端的配置文件中会有这么一个配置文件

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

电子书教程推荐:

启动方法 基于最基础的 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 子进程中某一个进程的启停操作:supervisorctl stop elkpro_2

关于grok语法

官方给定的语法

如果你使用的正则语言可以将nginx日志进行匹配,就可以成功对日志进行切割,效果看下图:

调试的过程中可以使用这个网站来进行正则语法的测试:

1. 线上配置的信息格式192.168.70.94 跟权威指南中的一样SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:以下这个是Logstash默认自带了Apache标准日志的grok正则表达式:COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] &34; %{NUMBER:response} (?:%{NUMBER:bytes}|-)COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}2. 我的nginx日志切割格式NGINX_ACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{HTTPDATE:tiem_local}\] \&34; %{INT:status} %{NUMBER:bytes_sent} \&34; \&34;MAINNGINXLOG %{COMBINEDAPACHELOG} %{QS:x_forwarded_for}

COMBINEDAPACHELOG 合并的apache日志logstash客户端用的是这种方式COMMONAPACHELOG 普通的apache日志

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

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

另外一种说法,暂时不会用,先放着1.if &34; in [tags] { drop { } }2.match语句跟第一个一样的没啥要点,看着官网例子搞就行了3.尽量用grok吧 ,grep功能以后要去掉的。

当时想的另外一种解决方法就是改nginx的日志格式成json形式的,但是我不想用这种方法。

log_format json &34;@timestamp&34;$time_iso8601&39; &34;host&34;$server_addr&39; &34;clientip&34;$remote_addr&39; &34;request&34;$request&39; &34;status&34;$status&39; &34;request_method&34;$request_method&39; &34;size&34;$body_bytes_sent&39; &34;request_time&34;$request_time&39; &34;upstreamtime&34;$upstream_response_time&39; &34;upstreamhost&34;$upstream_addr&39; &34;http_host&34;$host&39; &34;url&34;$uri&39; &34;http_forward&34;$http_x_forwarded_for&39; &34;referer&34;$http_referer&39; &34;agent&34;$http_user_agent&39;;access_log/var/log/nginx/access.log json ;

问题解决

以下是两种日志方式:log_formatmain&34;$request&39;&34;$http_referer&39;&34;$http_user_agent&34;$http_x_forwarded_for&34;$host&34;$request_time&39;;log_format format2&34;$request&39;&34;$http_referer&39;&34;$http_user_agent&34;$http_x_forwarded_for&34;$host&34;$request_time&39;;在logstash中进行切割的时候调用的时间变量是不同的,灵感来自如下: grok {match => { &34; => &34; }}date{match => [&34;,&34;,&34;]target => &34;}mutate{remove_field => [&34;]}定义:HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT}TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?34;%{DATA:request}\&34;%{DATA:http_referer}\&34;%{DATA:http_user_agent}\&34;NGINX_ACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{TIMESTAMP_ISO8601:time_iso8601}\] \&34; %{INT:status} %{NUMBER:bytes_sent} \&34; \&34;SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] &34; %{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}\]

链接:

上一篇 2023年05月23 19:47
下一篇 2023年05月20 06:19

相关推荐

关注微信