2017 12-01 ELK的应用

一.搜索引擎的介绍

(1)索引组件:获取数据-->建立文档-->文档分析-->文档索引(倒排索引)
(2)搜索组件:用户搜索接口-->建立查询(将用户键入的信息转换为可处理的查询对象)-->搜索查询-->展现结果
索引组件:Lucene(apache 旗下的产品)
Lucene Core:Apache Lucene™ 是一个高性能,全功能的文本搜索引擎库,全部由Java编写。其技术上几乎适合任何需要全文搜索的应用程序,尤其是对跨平台的应用。
(3)搜索组件:Solr, ElasticSearch(基于Lucene core来工作的搜索组件)

  • Solr(企业级搜索应用服务器):是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
  • ElasticSearch: 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储数据,可以发现意料之中以及意料之外的情况。

二.Elastic Stack

(1)ELK的组成

1.ElasticSearch
2.Logstash:
Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据、转换数据,然后将数据发送到指定的的 “存储库” 中。
3.Kibana:
Kibana 让您能够可视化 Elasticsearch 中的数据并操作 Elastic Stack,因此您可以在这里解开任何疑问。
4.Beats:
平台集合了多种单一用途数据采集器。这些采集器安装后可用作轻量型代理,从成百上千或成千上万台机器向 Logstash 或 Elasticsearch 发送数据。

(2)ELS集群的工作逻辑

1.多播,单播:9300(集群端口)/tcp,服务器端口:9200
2.关键因素:clustername
所有的节点选举一个主节点,负责管理整个集群状态以及各shards(切片,默认切为5个分片)的分布式方式
三种状态:green yellow red
green:健康状态,所有主副切片都存在
Yellow:缺少某些切片,但是可以恢复
red:缺少某些切片,并且不可恢复

3.实验:创建一个小的集群
步骤:
(1)配置三个节点并安装ES,官方下载地址:www.elastic.co选择download——选择rpm包进行下载
因为该搜索引擎是基于java语言开发的所以要安装jvm
yum install java-1.8.0-openjdk-devel,其他两个节点做相同操作
(2)创建新的目录
mkdir -pv /els/{data,logs}
chown -R /els/*
(3)修改配置文件
vim /etc/elasticsearch/elasticsearch.yml
修改如下

cluster.name: myels1
node.name: node1
path.data: /els/data
path.logs: /els/logs
network.host: 172.18.254.242
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node3","node4"]
discovery.zen.minimum_master_nodes: 2——选举机制防止脑裂,同意机制必须超过半数

其他节点同上,只需要将节点名和network.host修改即可
启动之前还要vim jvm.options


搜狗截图20171206204908.png

修改完成后systemctl start elasticsearch.service
观察9200和9300端口是否打开


搜狗截图20171206205102.png

(4)使用curl进行测试
curl -XGET '172.18.254.242:9200/'


搜狗截图20171206205307.png

curl -XGET '172.18.250.223:9200/'


搜狗截图20171206205340.png

curl -XGET '172.18.254.242:9200/_cluster/?pretty'——漂亮模式显示

4.三个特殊端点
(1)/_cluster
curl -XGET '172.18.254.242:9200/_cluster/?pretty'——漂亮模式显示
(2),/_cat
curl -XGET '172.18.254.242:9200/_cat/indices?pretty'
查看文档命令,正常为空,所以可以使用-XPUT来创建文档
实验创建一个书的文档,名字为computer(分类名)
curl -XGET '172.18.254.242:9200/books/computer/1' -d '{
"name": "Elasticsearch in Action",——书的名字
"date": "DEC3,2015",——日期
"author": "Radu"——作者
}'
(3)/_search
curl -XGET '172.18.254.242:9200'/books/computer/_search?pretty' ——查看有关computer的所有匹配到文档


搜狗截图20171206225020.png

curl -XGET '172.18.254.242:9200/books/computer/_search?pretty' -d '
{
"query": {
"match_all": {}
}
}'
属于query模式的全部匹配模式


搜狗截图20171207091224.png

curl -XGET '172.18.254.242:9200/books/computer/_search?q=elasticsearch&pretty=true'
搜狗截图20171207091947.png

curl -XGET '172.18.254.242:9200/books/computer/_search?q=_all:kubernete&pretty=true'——查询一本名叫kubernete的书
搜狗截图20171207092143.png

curl -XGET '172.18.254.242:9200/books/computer/_search?q=_all:kubernete~&pretty=true'——加入波浪符代表模糊匹配允许字符有一个不相同

(3)安装elasticsearch-head插件

通过该插件可以实现在web端对elasticsearch集群的管理
1.vim /etc/elasticsearch/elasticsearch.yml

搜狗截图20171207093004.png

2.安装head
git clone htttp://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
执行npm install npm run start &——后台启动并运行
ss -ntl 发现9100端口被打开
重启elasticsearch.service
此时可以在web页面上管理集群
搜狗截图20171207095659.png

三.logstash

在上述中已经介绍了logstash的作用,其主要的作用就是对来源数据采集(input),转换数据(filter),发送数据(output)到指定的存储库
在官网上下载www.ealstic.co/download/logstash-5.5.1.rpm
然后rpm -ivh logstash-5.5.1.rpm
rpm -ql logstash |less

搜狗截图20171207101025.png

/usr/share/logstash/bin/logstash --help来查看帮助
其中最常用的是-t和-f,-t用来检查语法,-f指定要启动哪个文件

  • 例:
    cd /etc/logstash/conf.d
vim  test.conf
 input {

     stdin {}
}


output {

   stdout {}

}

搜狗截图20171207101025.png

vim test.conf

 input {

     stdin {}
}


output {

   stdout {

     codec => rubydebug
  }

}
搜狗截图20171207102323.png

logstash中三个重要的插件

1.input plugins


搜狗截图20171207102829.png

[图片上传中...(搜狗截图20171207103040.png-91526f-1512613953070-0)]
2.filter plugins


搜狗截图20171207103040.png

3.output plugins
搜狗截图20171207103148.png

主要查件的介绍与使用

(1)input中的file方式来获取数据
vim test.conf

input {

     file {
     path => ["/var/log/httpd/access_log"]
     start_position => "beginning"


  }
}


output {

   stdout {

     codec => rubydebug
  }

}

在另一个客户端访问node4的httpd
curl http//:172.18.250.89/
执行/usr/share/logstash/bin/logstash -f ./test.conf


搜狗截图20171207104831.png

(2)filter查件——grok
grok的作用是将各种描述信息按照需要进行切分


搜狗截图20171207105355.png

vim test.conf
加入filter
input {

     file {
     path => ["/var/log/httpd/access_log"]
     start_position => "beginning"


  }
}


filter {

    grok {
   match => {

     "message" => "%{COMBINEDAPACHELOG}"

        }
    }


}

output {

   stdout {

     codec => rubydebug
  }

}

/usr/share/logstash/bin/logstash -f ./test.conf


搜狗截图20171207110050.png

(3)output的file文件
指定输出内容到某指定的路径文件中去
vim test.conf
将output修改即可

output {

  file {

  path => ["/tmp/httpd_access_log.json"]
  }

}

检查语法没有错误后,执行test.conf


搜狗截图20171207111131.png

(4)output elasticsearch

output {

  elasticsearch{
     hosts=> ["http://172.18.254.242:9200","http://172.18.250.223:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
    action => "index"——构建索引
  }

}

检查语法正确就可以执行
输出的数据就会存储到elasticsearch集群的并新建了一个logstash
在elasticsearch集群中使用curl命令来访问node3


搜狗截图20171207113458.png

此时在elasticsearch集群中就可以查询访日的内容


搜狗截图20171207113734.png

只搜索集群的某个地址
curl -XGET '172.18.250.223:9200/logstash-*/_search?q=clientip=172.18.250.223&pretty'
搜狗截图20171207113931.png

(5)beats插件

Beats 平台集合了多种单一用途数据采集器。这些采集器安装后可用作轻量型代理,从成百上千或成千上万台机器向 Logstash 或 Elasticsearch 发送数据。
官网下载beats
rpm -ql filebeat
注意:filebeat本身可以直接将输出数据输送到elasticsearch中,也可以先发送到logstash.service,然后由logstash发送到elasticsearch中
本实验为了方便将filebeat和logstash放在同一主机上进行运行测试
配置文件 /etc/filebeat/filebeat.yml
vim /etc/filebeat/filebeat.yml

-input_type: log
paths:
  - /var/log/httpd/access_log*
output.elasticsearch:
 hosts: ["172.18.254.242:9200", "172.18.250.223:9200"]
 protocol: "http"

上述配置是将输出数据直接发送到elasticsearch中
curl命令测试一下


搜狗截图20171207150841.png

搜狗截图20171207151022.png

再次编辑filebeat.yml配置文件进行修改,实现基于filebeat通过Logstash.service将数据发送到elasticsearch中
vim filebeat.yml

output.logstash:
hosts: ["172.18.250.89:5044"]

输入不变,只改变输出类型即可
并且还要修改/etc/logstash/conf.d/test.conf

 input {

   beats {
   port => 5044

 }

}

此时不需要执行/usr/share/logstash/bin/logstash -f ./test.conf
而是直接执行
systemctl start logstash.service
systemctl restart filebeat.service
ss -ntl 5044端口打开


搜狗截图20171207151829.png

搜狗截图20171207152259.png

curl -XGET '172.18.250.223:9200/logstash-*/_search?pretty'


搜狗截图20171207152444.png

(6)mutate插件

filter {

    grok {
   match => {
   
     "message" => "%{COMBINEDAPACHELOG}"
     
        }
    }    
   mutate  {
   
              rename => {
                "clientip" => "client_ip"
     }          
   }
 date {

       match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]
  }

}

curl -XGET '172.18.250.223:9200/logstash-*/_search?q=clientip=172.18.250.223&pretty'


搜狗截图20171207175636.png

(7)geoip
vim geoip.conf

 input {
   
   beats { 
   port => 5044
 }
}

filter {

   match => {
     "message" => "%{COMBINEDAPACHELOG}"
     
        }
    }    
   date {
   
     match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]
 }   
 
   geoip {
   
       source => "clientip"
       target => "geoip"
       database => "/etc/logstash/GeoLite2-City.mmdb"
  }    
  
} 

output {

  elasticsearch{
     hosts=> ["http://172.18.254.242:9200","http://172.18.250.223:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
    action => "index"
  } 
  
}

echo '72.18.250.223 - - [07/Dec/2017:18:13:41 +0800] "GET / HTTP/1.1" 200 16 "-" "curl/7.29.0" >> /var/log/httpd/access_log
echo 202.18.250.223 - - [07/Dec/2017:18:13:41 +0800] "GET / HTTP/1.1" 200 16 "-" "curl/7.29.0" '>> /var/log/httpd/access_log
将公网ip追加到httpd的日志文件中,否则用私网ip访问是无法显示ip地址的来源地区的


搜狗截图20171207220017.png

四.集群方式实现

搜狗截图20171207203542.png

具体实施步骤
(1)在node5上yum install java-1.8.0-openjdk-devel
rpm -ivh logstash-5.5.1.rpm
将之前的test.conf脚本复制到本机上
(2)在node6上 yum install httpd
rpm -ivh filebeat-5.5.1-x86_64.rpm
systemctl start httpd
vim /var/www/html/index.html
test node7
在elasticsearch中的服务上访问Node6的http服务
(3)编辑filebeat的配置文件
paths

  • /var/log/httpd/access_log
    开启output.logstash
    hosts: ["172.18.250.62:5044"]——node5的ip地址
    (4)在node5上配合redis服务
    yum install redis
    vim /etc/redis.conf
    bind 0.0.0.0
    requirepass magedu
    启动redis
    (5)编辑redis-input.conf
    vim /etc/logstash/conf.d/redis-input.conf
    修改input即可
input {
     redis{
       host => "172.18.250.89"
       port => 6379
       data_type => "list"
       db   => "0"
       key => "filebeat"
       password => "magedu"
 }

}

在Node6 vim /etc/filebeat/filebeat.yml
自定义output.redis


搜狗截图20171207210123.png

重启filebeat.service
(6)在客户端多访问几次Node6的http服务
redis-cli -a magedu
LINDEX filebeat 0
LINDEX filebeat 1
LINDEX filebeat 2


搜狗截图20171207214017.png
搜狗截图20171207214105.png

在node5上检查redis.conf脚本没有错误后
执行该脚本

此时发现LINDEX中的filebeat文件消失了,这是因为redis中的filebeat数据被elasticsearch集群提走
综上可以将上述中的geoip.conf最为conf.d的配置守护文件,将其他文件移除到/root/目录下,然后开启logstash服务

五.基于kibana的集群访问

搜狗截图20171207220648.png

(1)在node5上rpm -ivh kibana-5.5.1-x86_64.rpm
vim /etc/kibana/kibana.yml


搜狗截图20171207221503.png

开启服务发现5601端口被打开
在web页面打开kibana


搜狗截图20171208204319.png

(2)在node6上

cd /var/log/httpd/
while true; do echo "$[$RANDOM%224+1].$[$RANDOM%256].$[$RANDOM%256].$[$RANDOM%255+1] - - [07/Dec/2017:22:32:53 +0800] "GET / HTTP/1.1" 200 16 "-" "curl/7.29.0"" >> access_log;sleep 1;done


搜狗截图20171207224808.png

在kibana界面可以查询访问情况


搜狗截图20171208204543.png

此时就可以在kibana界面上来管理elasticsearch集群了
在kibana界面上可以观察geoip的相关信息
搜狗截图20171208204543.png

也可以通过图形的方式来进行监控和观察


搜狗截图20171208204919.png

根据自身要求来创建图形的显示方式
搜狗截图20171208205206.png

创建新的视图来显示客户端ip地址的地理位置
搜狗截图20171208205412.png

根据需要创建后来查看显示结果
搜狗截图20171208205708.png

以上图形如果想要以后继续查看可以点击save,并命令后保存即可
搜狗截图20171208210057.png

为了更好地视图的体验,可以通过编辑Dashbord来中和两个图形
搜狗截图20171208211105.png

其他选项,如在Visualize中,选择markdown进行文本编辑


搜狗截图20171208212211.png

搜狗截图20171208212309.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容