首页 > IT基础架构 > > 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 的核心,它集中存储数据,可以发现意料之中以及意料之外的情况。
1.ElasticSearch 2.Logstash: Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据、转换数据,然后将数据发送到指定的的 “存储库” 中。 3.Kibana: Kibana 让您能够可视化 Elasticsearch 中的数据并操作 Elastic Stack,因此您可以在这里解开任何疑问。 4.Beats: 平台集合了多种单一用途数据采集器。这些采集器安装后可用作轻量型代理,从成百上千或成千上万台机器向 Logstash 或 Elasticsearch 发送数据。
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'——加入波浪符代表模糊匹配允许字符有一个不相同
通过该插件可以实现在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的作用,其主要的作用就是对来源数据采集(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
}
}

1.input plugins
[图片上传中...(搜狗截图20171207103040.png-91526f-1512613953070-0)] 2.filter plugins
3.output plugins搜狗截图20171207103040.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

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

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

(3)output的file文件 指定输出内容到某指定的路径文件中去 vim test.conf 将output修改即可
output {
file {
path => ["/tmp/httpd_access_log.json"]
}
}
检查语法没有错误后,执行test.conf

(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集群中就可以查询访日的内容


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
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服务
(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,并命令后保存即可为了更好地视图的体验,可以通过编辑Dashbord来中和两个图形搜狗截图20171208210057.png其他选项,如在Visualize中,选择markdown进行文本编辑
搜狗截图20171208212211.png
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3170527/ ,如需转载,请注明出处,否则将追究法律责任。