ELK:适用于处理海量日志的一套工具,主要包括ElasticSearch、Logstash、Kibana。
ElasticSearch:负责存储和检索日志
Logstash:负责对日志数据的分析和处理
Kibana:日志数据的可视化
一、ElasticSearch的相关概念
ElasticSearch是一款面向文档的数据库。类似于nosql,通过http请求进行操作。
相关概念:
node:安装了ElasticSearch数据库的主机
cluster:集群
document:可以被搜索、查找的基本单元。相当于sql中的行
index:拥有相似特征的文档集合。相当于sql中的database
type:类型。相当于sql中的表
filed:相当于sql中的列
shards:(index)的分片
replicas:(index)的拷贝
二、安装
以一台主机为例:192.168.1.51(已经配置好对应的yum,关闭防火墙和selinux)
修改/etc/hosts保证主机名可以ping通
yum -y install java-1.8.0-openjdk
yum -y install elasticsearch
vim /etc/elasticsearch/elasticsearch.yml # 配置文件
network.host: 0.0.0.0 # 54行
systemctl start elasticsearch # 启动服务,9200和9300端口被监听
访问http://192.168.1.51:9200
三、ELK集群
准备主机:192.168.51~55
修改/etc/hosts将所有主机都加入,保证可以ping通
安装过程和单台主机完全一样,仅需要对配置文件进行修改
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: ELKDB # 集群的名称,同一个集群名称要相同,17行
node.name: es1 # 本机的主机名,23行
network.host: 0.0.0.0 # 54行
discovery.zen.ping.unicast.hosts: ["es1", "es2", "es3"] # 声明集群主机代表(并非所有主机),68行
# 如果重启集群需要首先启动声明的集群代表主机
# 这些主机是集群的“代表”,集群中的主机重启后需要到这里来“报到”然后才可以加入集群
# 验证:关闭集群所有主机es1~es5、从es5开始依次启动,每启动一台就查看依次集群状态
systemctl restart elasticsearch
访问:firefox http://192.168.1.51:9200/_cluster/health?pretty # 查看集群状态
四、ES插件
插件只需要安装在集群中的一台主机上,就可以管理集群中的所有主机(安装在1.51上)
head插件:展现拓扑结构,可以进行index和node级别的操作,提供查询api、
将结果以json和表格的形式返回,提供一些快捷菜单,用来展现集群的各种状态
kopf插件:是es集群的管理工具,提供了对es集群操作的api
bigdesk:是es集群的一个集群监控工具,可以查看集群的各种状态,cpu、内存使用情况,
可以查看index数据,搜索情况,http连接数等信息。
安装插件:
cd /usr/share/elasticsearch/bin/
./plugin install ftp://192.168.1.254/elk/elasticsearch-head-master.zip # 软件包必须要以url的形式,
./plugin install file:///elk/elasticsearch-kopf-master.zip # 本地url
./plugin install ftp://192.168.1.254/elk/bigdesk-master.zip
# 安装软件包一定给出定软件包的url地址
./plugin list # 查看安装的插件(install、remove、list)
访问http://192.168.1.55:9200/_plugin/head
四、ES操作
使用curl工具:
-X 指定method方式
-A 指定user-agent
-i 显示返回数据的头部信息,一般用于探测服务器
http://192.168.1.51:9200/_cat/health?v # 显示参数信息
http://192.168.1.51:9200/_cat/health?help # 查看帮助
1、创建index:
curl -X PUT "http://192.168.1.51:9200/index名" -d
‘{
"settings":{
"index":{
"number_of_shards":5, //分片数
"number_of_replicas":1 //副本数
}
}
}’ # json字符串
2、向index中插入数据:
curl -X PUT "http://192.168.1.51:9200/index名/type名/key" -d
'{
"name":"jason",
"age":"18",
}' # es类似于nosql,是key-value形式存储数据的
3、修改数据:(使用_update关键字)
curl -X PUT "http://192.168.1.51:9200/index名/type名/key/_update" -d
'{
"doc":{ # doc是关键字
"age": "30"
}
}' # 修改key对应的数据
4、查询:
curl -X GET "http://192.168.1.51:9200/index名/type名/key"
5、删除:(可以删除index,不能删除type)
curl -X DELETE "http://192.168.1.51:9200/index名/type名/key" # 删除对应的数据
curl -X DELETE "http://192.168.1.51:9200/index名/" # 删除对应的index
curl -X DELETE "http://192.168.1.51:9200/*" # 删除所有index
6、导入数据:(使用_bulk关键字)
①:导入index(相当于导入整个数据库)
curl -X POST "http://192.168.1.51:9200/_bulk" --data-binary @logs.json
# logs.json这个文件的奇数行是index,type和key
# 奇数行:{"index": {"_index": "index名称", "_type": "type名称", "_id": "key"}}
# 偶数行是json格式的数据,作为key对应的value
# 例如:
{"index":{"_index":"shakespeare","_type":"act","_id":0}} # 第一行
{"line_id":1,"play_name":"Henry IV","speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"} # 第二行
②:向指定的type中导入数据(相当于向某个表中导入数据)
curl -X POST "http://192.168.1.51:9200/index名称/type名称/_bulk" --data-binary @xx.json
# xx.json这个文件的奇数行只有key
# 奇数行:{"index":{"_id":"key"}}
# 偶数行是json格式的数据,作为key对应的value
# 例如:
{"index":{"_id":"1"}} # 第一行
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke"} # 第二行