elasticsearchElasticsearch 我用 Linux

2017 12-01 ELK的应用

2017-12-08  本文已影响58人  楠人帮

一.搜索引擎的介绍

(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
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
上一篇下一篇

猜你喜欢

热点阅读