什么是ELK
- ELK是一整套解决方案,是三个软件产品的首字母缩写
- ELK分别代表
- Elasticsearch:负责日志检索和储存
- Logstash:负责日志的收集和分析、处理
- Kibana:负责日志的可视化
- 这三款软件都是开源软件,通常是配合使用,而且又先后归于Elastic.co公司名下,故被简称为ELK
ELK的作用
ELK组件在海量日志系统的运维中,可用于解决
- 分布式日志数据集中式查询和管理
- 系统监控,包含系统硬件和应用各个组件的监控
- 故障排查
- 安全信息和事件管理
- 报表功能
Elasticsearch
- ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful API的Web接口
- Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速。安装使用方便
主要特点
- 实时分析
- 分布式实时文件存储,并将每一个字段都编入索引
- 文档导向:所有的对象全部是文档
- 高可用性,易扩展,支持集群( Cluster)、分片和复制( Shards和 Replicas)
- 接口友好,支持JSON
- Elasticsearch没有典型意义的事务
- Elasticsearch是一种面向文档的数据库
- Elasticsearch没有提供授权和认证特性
相关概念
它是一种非关系型数据库
- Node:装有一个ES服务器的节点
- Cluster:有多个Node组成的集群
- Document:一个可被搜索的基础信息单元
- Index:拥有相似特征的文档的集合
- Type:一个索引中可以定义一种或多种类型
- Filed:是ES的最小单位,相当于数据的某一列
- Shards:索引的分片,每一个分片就是一个 Shard
- Replicas:索引的拷贝
ES集群安装
- 所需软件包
elasticsearch-2.3.4.rpm
kibana-4.5.2-1.x86_64.rpm
filebeat-1.2.3-x86_64.rpm
logstash-2.3.4-1.noarch.rpm
[root@yum ~] 上传文件到yum源
[root@yum ~] createrepo --update /var/ftp/localrepo #更新yum源
- 集群架构
主机名 | IP | 作用 |
---|---|---|
es1 | 192.168.1.51 | 分布式数据库 |
es2 | 192.168.1.52 | 分布式数据库 |
es3 | 192.168.1.53 | 分布式数据库 |
es4 | 192.168.1.54 | 分布式数据库 |
es5 | 192.168.1.55 | 分布式数据库 |
kibana | 192.168.1.56 | 日志可视化 |
logstash | 192.168.1.57 | 收集分析,处理日志 |
yum | 192.168.1.252 | 提供yum源 |
1)安装方法
- 设置主机名解析
- 解决依赖关系,安装软件包
- 修改配置文件
- 启动服务
- 检查服务
[root@es1 ~] vim /etc/hosts
192.168.1.51 es1
[root@es1 ~] yum -y install java-1.8.0-openjdk
[root@es1 ~] yum -y install elasticsearch
[root@es1 ~] vim /etc/elasticsearch/elsticsearch.yml
54 network.host: 0.0.0.0
[root@es1 ~] systemctl start elasticsearch
[root@es1 ~] systemctl enable elasticsearch
[root@es1 ~] ss -lntup
[root@es1 ~] curl 192.168.1.51:9200
{
"name" : "es1",
"cluster_name" : "elk",
"version" : {
"number" : "2.3.4",
"build_hash" : "e455fd0c13dceca8dbbdbb1665d068ae55dabe3f",
"build_timestamp" : "2016-06-30T11:24:31Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"
}
2)使用ansible部署集群
- 实验时使用的playbook
- 集群在部署时需要额外修改配置文件,其余步骤与上述方法相同
] vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: elk #集群名称,需要所有服务器相同
23 node.name: {{ ansible_hostname }}
# playbook中使用template模块的写法,作用是调取主机名,需要与/etc/hosts文件中对应
54 network.host: 0.0.0.0
68 discovery.zen.ping.unicast.hosts: ["es1", "es2", "es3", "es4", "es5"] #表明集群中的主机
- 集群中的所有节点要相互能够ping通,要在所有集群
- 机器上配置/etc/hosts中的主机名与ip对应关系
- 集群中所有机器都要安装Java环境
- clustername集群名称配置要求完全一致
- node.name为当前节点标识,应配置本机的主机名
- discovery为集群节点机器,不需要全部配置
- 配置完成以后启动所有节点服务
验证:
curl 192.168.1.51:9200/_cluster/health?pretty
{
"cluster_name" : "nsd1910",
"status" : "green", #集群状态,green为正常,yellow为存在问题,red为完全故障
"timed_out" : false,
"number_of_nodes" : 5, #集群节点数量
"number_of_data_nodes" : 5, #集群数据节点数量
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
ES插件的使用
1)常用插件
head插件
- 它展现ES集群的拓扑结构,并且可以通过它来进行索引(Index)和节点(Node)级别的操作
- 它提供一组针对集群的查询API,并将结果以json和表格形式返回
- 它提供一些快捷菜单,用以展现集群的各种状态
kopf插件
- 是一个 ElasticSearch的管理工具
- 它提供了对ES集群操作的API
bigdesk插件
- 是elasticsearch的一个集群监控工具
- 可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况 , http连接数等
2)ES插件安装、查看
在集群的一个节点上安装即可
[root@es5 ~] ln -s /usr/share/elasticsearch/bin/plugin /usr/local/bin/ #为命令创建软连接
[root@es5 ~] plugin install 插件文件URL地址 #安装插件
[root@es5 ~] plugin list #查看已安装插件
[root@es5 ~] plugin remove 插件名 #移除插件
在yum服务器上部署ftp以提供插件
[root@yum ~] ls /var/ftp/elk/ #提供ftp服务
elasticsearch-head-master.zip bigdesk-master.zip
elasticsearch-kopf-master.zip
安装插件:
扫描二维码关注公众号,回复:
9423678 查看本文章
[root@es5 ~] plugin ftp://192.168.1.252/elk/elasticsearch-kopf-master.zip
[root@es5 ~] plugin ftp://192.168.1.252/elk/bigdesk-master.zip
[root@es5 ~] plugin ftp://192.168.1.252/elk/elasticsearch-head-master.zip
#################################################
当插件文件在本地时:
[root@es5 ~] plugin file:///root/bigdesk-master.zip #URL地址
- 安装插件时,必须指定插件的URL地址
3)使用插件
使用浏览器访问:(没有公网ip,就搭建proxy或者使用弹性负载均衡)
http://192.168.1.55:9200/_plugin/head
http://192.168.1.55:9200/_plugin/kopf
http://192.168.1.55:9200/_plugin/bigdesk
4)扩展插件RESTful API
http协议简介
- http请求由三部分组成:
分别是:请求行、消息报头、请求正文 - 请求行以一个方法符号开头,以空格分开,后面跟着 请求的∪R和协议版本,格式如下:
Method Request-uri HTTP-Version Crlf - http请求方法
- 常用方法GET,POST,HEAD
- 其他方法OPTIONS,PUT, DELETE, TRACE和 CONNECT
- ES常用
- PUT 增
- DELETE 删
- POST 改
- GET 查
curl介绍:
- 在linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持多种请求模式,自定义请求头等强大功能,是一款综合工具
- 常用参数:
-A
:修改请求Agent-X
:指定请求方法-i
:显示返回头信息
RESTful API调用
Elasticsearch提供了一系列RESTful的API
- 检查集群、节点、索引的健康度、状态和统计
- 管理集群、节点、索引的数据及元数据
- 对索引进行CRUD操作及查询操作
- 执行其他高级操作如分页、排序、过滤等
POST或PUT数据使用json格式
curl 192.168.1.52:9200/_cat/
curl 192.168.1.52:9200/_cat/health?v
curl 192.168.1.52:9200/_cat/master #查看master节点
curl 192.168.1.52:9200/_cat/master?v #?v:显示详细信息
curl 192.168.1.52:9200/_cat/master?help #?help:查看帮助信息
curl 192.168.1.52:9200/_cat/nodes #查看节点
curl 192.168.1.52:9200/_cat/indices #查看索引
curl 192.168.1.52:9200/_cat/shards #查看分片
1.增PUT:
curl -X PUT 192.168.1.52:9200/school -d '
> {"settings": {
> "index": {
> "number_of_shards": 5,
> "number_of_replicas": 1
> }
> }
> }'
# 新建索引,名称为school,分片数量为5,副本数量为1
- 调用方式:
数据库地址/索引/类型/id
curl -X PUT http://192.168.1.51:9200/school/teacher/1 -d '
{
"姓名": "dc",
"爱好": "烫头",
"阶段": "1.0"
}'
# 在school'索引'下新增数据,teacher为'类型',1为'id'
2.改POST
- 修改数据必须调用
_update
关键字 - 调用方式:
数据库地址/索引/类型/id/_update
curl -X POST http://192.168.1.52:9200/school/teacher/1/_update -d '
{"doc":{"爱好": "撸猫"}}'
# doc为固定格式
3.查GET
- 多条查询需要使用
_mget
关键字配合json调用
curl -X GET http://192.168.1.53:9200/school/teacher/1?pretty
# GET可以省略,默认为GET方式,?pretty为以规范的方式输出
4.删DELETE
- 可以删除文档,可以删除索引,但是不能删除类型
curl -X DELETE http://192.168.1.53:9200/school/teacher/1
curl -X DELETE http://192.168.1.53:9200/school #删除索引
curl -X DELETE http://192.168.1.53:9200/* #删除所有
导入数据:
- 调用
_bulk
批量导入数据 - 方式为
POST
,数据格式为json
,url编码使用data-binary
导入含有index配置的json文件:
gzip -d log.jsonl.gz
curl -X POST 192.168.1.51:9200/_bulk --data-binary @logs.jsonl
Kibana
1)什么是kibana
- 数据可视化平台工具
- 特点:
- 灵活的分析和可视化平台
- 实时总结流量和数据的图表
- 为不同的用户显示直观的界面
- 即时分享和嵌入的仪表板
2)安装Kibana
配置好yum源,直接安装:
[root@kibana ~] yum -y install kibana
[root@kibana ~] vim /opt/kibana/config/kibana.yml #配置文件,只修改第15行,其他行去掉注释就行
2 server.port: 5601 #监听端口
5 server.host: "0.0.0.0" #监听地址,0.0.0.0表示所有
15 elasticsearch.url: "http://192.168.1.51:9200" #指定es集群的ip,任意一台都行
23 kibana.index: ".kibana"
26 kibana.defaultAppId: "discover" #默认首页
53 elasticsearch.pingTimeout: 1500 #ping超时时间
57 elasticsearch.requestTimeout: 30000 #请求超时时间
64 elasticsearch.startupTimeout: 5000 #启动超时时间
[root@kibana ~] systemctl start kibana
[root@kibana ~] systemclt enable kibana
[root@kibana ~] ss -lntup | grep 5601
启动kibana后访问es集群的head插件页面:http://192.168.1.55:9200/_plugin/head
,如果存在名为.kibana
的索引,表明kibana与es集群连接成功
3)kibana使用
浏览器访问http://192.168.1.56:5601
查看status页面,全绿说明配置正常
- 初始化
- 查看数据
- 数据展示方式
- 创建饼图
最后在仪表盘dashboard中添加创建的图表,即