分布式ELK平台

什么是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部署集群

] 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

安装插件:

[root@es5 ~] plugin install ftp://192.168.1.252/elk/elasticsearch-kopf-master.zip
[root@es5 ~] plugin install ftp://192.168.1.252/elk/bigdesk-master.zip
[root@es5 ~] plugin install 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

  • 数据可视化平台工具
  • 特点:
    1. 灵活的分析和可视化平台
    2. 实时总结流量和数据的图表
    3. 为不同的用户显示直观的界面
    4. 即时分享和嵌入的仪表板

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中添加创建的图表,即
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章