ITPub博客

首页 > IT基础架构 > > 2017 12-01 ELK的应用

2017 12-01 ELK的应用

作者:飘絮絮絮丶 时间:2022-01-25 15:02:20 0 删除 编辑

一.搜索引擎的介绍

(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

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

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

curl -XGET '172.18.250.223:9200/'

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的所有匹配到文档

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

curl -XGET '172.18.254.242:9200/books/computer/_search?q=elasticsearch&pretty=true'
curl -XGET '172.18.254.242:9200/books/computer/_search?q=_all:kubernete&pretty=true'——查询一本名叫kubernete的书
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

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页面上管理集群

三.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

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

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

stdin {}
}


output {

stdout {}

}


vim test.conf

input {

stdin {}
}


output {

stdout {

codec => rubydebug
}

}

logstash中三个重要的插件

1.input plugins

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

搜狗截图20171207103040.png
3.output plugins

主要查件的介绍与使用

(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的作用是将各种描述信息按照需要进行切分

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

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

只搜索集群的某个地址 curl -XGET '172.18.250.223:9200/logstash-*/_search?q=clientip=172.18.250.223&pretty'
(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命令测试一下

再次编辑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端口打开


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

(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'

(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地址的来源地区的

四.集群方式实现

具体实施步骤 (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

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


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

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

五.基于kibana的集群访问

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

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

(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

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

此时就可以在kibana界面上来管理elasticsearch集群了 在kibana界面上可以观察geoip的相关信息

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

根据自身要求来创建图形的显示方式
创建新的视图来显示客户端ip地址的地理位置
根据需要创建后来查看显示结果
以上图形如果想要以后继续查看可以点击save,并命令后保存即可
搜狗截图20171208210057.png
为了更好地视图的体验,可以通过编辑Dashbord来中和两个图形

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

搜狗截图20171208212211.png
作者:楠人帮链接:https://www.jianshu.com/p/38416143229a来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3170527/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42191