搭建部署 分布式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 与关系型数据库的对比

– 在 ES 中,文档归属于一种 类型 (type) ,而这些类型存在于索引 (index) 中,类比传统关系型数据库

– DB -> Databases -> Tables -> Rows -> Columns

– 关系型   数据库           表         行           列

– ES -> Indices -> Types -> Documents -> Fields

– ES      索引         类型         文档         域(字段)

Elasticsearch架构图

ES 集群安装

准备集群 es1 es2 es3 es4 es5 五台主机 部署集群


步骤1 设置ip 与主机名称对应关系

# ssh -x [email protected]

# vim /etc/hosts

...

192.168.4.11     es1

192.168.4.12     es2

192.168.4.13     es3

192.168.4.14     es4

192.168.4.15     es5

# for i in {12..15}; do rsync -a /etc/hosts 192.168.4.${i}:/etc/hosts ;done

步骤2 安装 JDK

– Elasticsearch 要求至少 Java 7

– 一般推荐使用 OpenJDK 1.8

– 配置好安装源以后,我们先解决依赖关系

# yum install -y java-1.8.0-openjdk

步骤 3 安装ES

# rpm -ivh  elasticsearch-2.3.4-1.noarch

步骤 4 修改配置文件

# ssh -x [email protected]

# vim /etc/elasticsearch/elasticsearch.yml

# grep -v "^#" /etc/elasticsearch/elasticsearch.yml

cluster.name: es-test

node.name: es1

network.host: 0.0.0.0

discovery.zen.ping.unicast.hosts: ["es1", "es2", "es3"]

//其他主机可以使用如下方法 快速修改配置文件

# for i in {12..15}; do rsync -a /etc/elasticsearch/elasticsearch.yml 192.168.4.${i}:/etc/elasticsearch/elasticsearch.yml ; done

# for i in {2..5}; do  ssh es${i} 'sed -i "s/^\(node.name:\).*/\1 ${HOSTNAME}/" /etc/elasticsearch/elasticsearch.yml' ; done

步骤5 启动服务,设置自启动

# systemctl enable elasticsearch

# systemctl start elasticsearch

//其他主机可以使用如下方法 快速启动服务

# for i in {12..15}; do ssh 192.168.4.${i} systemctl restart elasticsearch.service; done

# for i in {12..15}; do ssh 192.168.4.${i} systemctl enable elasticsearch.service; done

验证

# nmap -n -sS -p 9200,9300 192.168.4.12-15

Starting Nmap 6.40 ( http://nmap.org ) at 2018-01-24 02:36 EST

Nmap scan report for 192.168.4.12

Host is up (0.00037s latency).

PORT     STATE SERVICE

9200/tcp open  wap-wsp

9300/tcp open  vrace

MAC Address: 74:52:51:32:11:01 (Unknown)

Nmap scan report for 192.168.4.13

Host is up (0.00038s latency).

PORT     STATE SERVICE

9200/tcp open  wap-wsp

9300/tcp open  vrace

MAC Address: 74:52:51:32:12:01 (Unknown)

Nmap scan report for 192.168.4.14

Host is up (0.00036s latency).

PORT     STATE SERVICE

9200/tcp open  wap-wsp

9300/tcp open  vrace

MAC Address: 74:52:51:32:13:01 (Unknown)

Nmap scan report for 192.168.4.15

Host is up (0.00037s latency).

PORT     STATE SERVICE

9200/tcp open  wap-wsp

9300/tcp open  vrace

MAC Address: 74:52:51:32:14:01 (Unknown)

Nmap done: 4 IP addresses (4 hosts up) scanned in 0.05 seconds

? 通过浏览器或 curl 访问 9200 端口

# curl http://es1:9200/_cluster/health?pretty

{

"cluster_name" : "es-test",        – 返回字段解析

"status" : "green",                      – 集群状态,绿色为正常,×××表示有问题但不是很严重,红色表示严重故障

"timed_out" : false,

"number_of_nodes" : 5,            – 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 常用插件

? head 插件:

– 它展现ES集群的拓扑结构,并且可以通过它来进行索引(Index)和节点(Node)级别的操作

– 它提供一组针对集群的查询API,并将结果以json和表格形式返回

– 它提供一些快捷菜单,用以展现集群的各种状态

? kopf 插件

– 是一个ElasticSearch的管理工具

– 它提供了对ES集群操作的API

? bigdesk 插件

– 是elasticsearch的一个集群监控工具

– 可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等

ES 插件安装,查看

插件可以安装在集群当中任意一台主机

– 安装插件

# cd /usr/share/elasticsearch/bin/

# ./plugin install  file:///root/bigdesk-master.zip

# ./plugin install  file:///root/elasticsearch-head-master.zip

# ./plugin install  file:///root/elasticsearch-kopf-master.zip

这里必须使用 url 的方式进行安装,如果文件在本地,我们也需要使用 file:// 的方式指定路径,

例如文件在/tmp/xxx 下面,我们要写成 file:///tmp/xxx 删除使用remove 指令

–  查看安装的插件

# ./plugin list

Installed plugins in /usr/share/elasticsearch/plugins:

- bigdesk

- head

- kopf

查看插件

# firefox http://es1:9200/_plugin/head

# firefox http://es1:9200/_plugin/kopf

# firefox http://es1:9200/_plugin/bigdesk

HTTP与 RESTful API

? Elasticsearch提供了一系列RESTful的API

– 检查集群、节点、索引的健康度、状态和统计

– 管理集群、节点、索引的数据及元数据

– 对索引进行CRUD操作及查询操作

– 执行其他高级操作如分页、排序、过滤等

? POST 或 PUT 数据使用 json 格式

? json

– JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。

– json 传输的就是一个字符串

– python 中对应的 字符串,列表,字典都可以转换成对应的 json 格式

? Rest API 的简单使用

– _cat API 查询集群状态,节点信息

# curl -X "GET" http://192.168.4.13:9200/_cat/

=^.^=

/_cat/allocation

/_cat/shards

/_cat/shards/{index}

/_cat/master

/_cat/nodes

/_cat/indices

/_cat/indices/{index}

/_cat/segments

/_cat/segments/{index}

/_cat/count

/_cat/count/{index}

/_cat/recovery

/_cat/recovery/{index}

/_cat/health

/_cat/pending_tasks

/_cat/aliases

/_cat/aliases/{alias}

/_cat/thread_pool

/_cat/plugins

/_cat/fielddata

/_cat/fielddata/{fields}

/_cat/nodeattrs

/_cat/repositories

/_cat/snapshots/{repository}

– nodes 查询节点状态信息

# curl -X "GET" http://192.168.4.13:9200/_cat/nodes

192.168.4.12 192.168.4.12 5 89 0.00 d m es2

192.168.4.13 192.168.4.13 4 75 0.01 d m es3

192.168.4.11 192.168.4.11 5 85 0.01 d m es1

192.168.4.15 192.168.4.15 6 73 0.00 d * es5

192.168.4.14 192.168.4.14 5 76 0.00 d m es4

– v 参数显示详细信息

# curl -X "GET" http://192.168.4.13:9200/_cat/nodes?v

– help 显示帮助信息

# curl -X "GET" http://192.168.4.13:9200/_cat/nodes?help

? HTTP Methods 和 RESTful API 设计

– HTTP Methods 也叫 HTTP Verbs, 它们是 HTTP 协议的一部分, 主要规定了 HTTP 如何请求和操作服务器上的资源,常见的有GET, POST等

– HTTP Methods 一共有九个,分别是 GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,CONNECT,PATCH

? HTTP Methods

– 在RESTful API 设计中,常用的有POST,GET,PUT,PATCH 和 DELETE。分别对应对资源的创建,获取,修改,部分修改和删除操作。

– 我们默认访问 ES API 的方法是 GET,如果要对数据库增加、删除、修改数据我们还要使用对应的方法

– GET 查询

– POST 增加

– PUT 更改

– DELETE 删除

? RESTful API 增加

— 创建一个school 的(index) 和 一个students (Type)

— 并增加两条信息

# curl -X "PUT" 'http://192.168.4.11:9200/school/student/1' -d '{

>   "title": "devops",

>    "name":{

> "first":"aa",

> "last":"bb"

>    },

>     "age":25

> }'

{"_index":"school","_type":"student","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}

# curl -X "PUT" 'http://192.168.4.11:9200/school/student/2' -d '{

>   "title": "devops",

>    "name":{

> "first":"AA",

> "last":"XX"

>    },

>     "age":25

> }'

{"_index":"school","_type":"student","_id":"2","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}

? RESTful API 更改

— 修改school 下面students 的第一个文档中的age 信息,从25修改30

# curl -X "POST" 'http://192.168.4.11:9200/school/student/1/_update' -d '{

>    "doc":{

>  "age":30

>     }

>  }'

{"_index":"school","_type":"student","_id":"1","_version":2,"_shards":{"total":2,"successful":2,"failed":0}}

? RESTful API 查询

— 查询刚刚创建的文挡信息

# curl -X "GET" 'http://192.168.4.11:9200/school/student/1'

{"_index":"school","_type":"student","_id":"1","_version":2,"found":true,"_source":{

"title":"devops",

"name":{

"first":"aa",

"last":"bb"

},

"age":30

}}

# curl -X "GET" 'http://192.168.4.11:9200/school/student/2'

{"_index":"school","_type":"student","_id":"2","_version":1,"found":true,"_source":{

"title": "devops",

"name":{

"first":"AA",

"last":"XX"

},

"age":25

}}

? RESTful API 删除

# curl -X "DELETE" 'http://192.168.4.11:9200/school/student/2'

{"found":true,"_index":"school","_type":"student","_id":"2","_version":2,"_shards":{"total":2,"successful":2,"failed":0}}

# curl -X "DELETE" 'http://192.168.4.11:9200/school/student/1'

{"found":true,"_index":"school","_type":"student","_id":"1","_version":3,"_shards":{"total":2,"successful":2,"failed":0}}

# curl -X "DELETE" 'http://192.168.4.11:9200/school'

{"acknowledged":true}

kibana 

? kibana是什么

– 数据可视化平台工具

? 特点:

– 灵活的分析和可视化平台

– 实时总结和流数据的图表

– 为不同的用户显示直观的界面

– 即时分享和嵌入的仪表板

Kibana 安装

– kibana 的安装非常简单,我们使用 rpm 方式安装

# rpm -ivh kibana-4.5.2-1.x86_64.rpm

– kibana 默认安装在 /opt/kibana 下面,配置文件在/opt/kibana/config/kibana.yml

# rpm -qc kibana

/opt/kibana/config/kibana.yml

? kibana.yml 的配置

# vim /opt/kibana/config/kibana.yml

# grep -Pv '^(#|$)' /opt/kibana/config/kibana.yml

server.port: 5601

server.host: "0.0.0.0"

elasticsearch.url: "http://192.168.4.11:9200"

kibana.index: ".kibana"

kibana.defaultAppId: "discover"

elasticsearch.pingTimeout: 1500

elasticsearch.requestTimeout: 30000

elasticsearch.startupTimeout: 5000

— 启动服务 设置开机启动

# systemctl start kibana.service

# systemctl enable kibana.service

# netstat -pantu | grep 5601

tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      10011/node

—web 访问kibana

http://192.168.4.10:5601/

http://192.168.4.11:9200/_plugin/head

数据批量导入

# ls json/

accounts.json   logs.jsonl  shakespeare.json

? 使用 _bulk 批量导入数据

– 批量导入数据使用 POST 方式,数据格式为 json,url编码使用 data-binary

– 导入含有 index 配置的 json 文件

# curl -X "POST" 'http://192.168.4.11:9200/_bulk' --data-binary @logs.jsonl

# curl -X "POST" 'http://192.168.4.11:9200/_bulk' --data-binary @shakespeare.json

? 使用 _bulk 批量导入数据

– 导入没有有 index 配置的 json 文件

– 我们需要在 uri 里面制定 index 和 type

# curl -X "POST" 'http://192.168.4.11:9200/accounts/act/_bulk' --data-binary @accounts.json

数据批量查询

数据批量查询使用 GET

# curl -X 'GET' "http://192.168.4.11:9200/_mget?pretty" -d'{

> "docs":[

>     {

>       "_index":"accounts",

>       "_type":"act",

>       "_id":3

>     }

>  ]

> }'

{

"docs" : [ {

"_index" : "accounts",

"_type" : "act",

"_id" : "3",

"_version" : 1,

"found" : true,

"_source" : {

"account_number" : 3,

"balance" : 44947,

"firstname" : "Levine",

"lastname" : "Burks",

"age" : 26,

"gender" : "F",

"address" : "328 Wilson Avenue",

"employer" : "Amtap",

"email" : "[email protected]",

"city" : "Cochranville",

"state" : "HI"

}

} ]

}

# curl -X 'GET' "http://192.168.4.11:9200/accounts/act/3?pretty"       //另一种查询方法 结果一样

//也可以同时查询多个

# curl -X 'GET' "http://192.168.4.11:9200/_mget?pretty" -d '{

> "docs":[

> {

> "_index":"accounts",

> "_type":"act",

> "_id":3

> },

> {

> "_index":"accounts",

> "_type":"act",

> "_id":5

> },

> {

> "_index":"shakespeare",

> "_type":"line",

> "_id":110

> }

> ]

> }'

数据导入以后查看logs 是否导入成功

修改kibana 的配置文件后启动 kibana ,然后查看ES集群,如果出现 .kibana Index 表示kibana 与ES集群连接成功

kibana 里选择日志

— 支持通配符 *

— 我们这里选择 logstash-*

– 在下面的 Time-field 选择 @timestramp 作为索引

– 然后点 create 按钮

这里显示数据没有找到 由上角可以看见 系统默认选择的是 最近15分钟

原因是我们刚刚导入的日志是2015-05-10至 2015-05-20 时间段的,这里我们修改一下时间显示  就可以看见数据展示了

数据展示

除了柱状图,kibana 还支持很多种展示方式

这里选项就是日志文件的字段类型,每个字段类型代表不同的数据

多种维度自定义统计分析

保存后可以在 Dashboard 查看

原文地址:http://blog.51cto.com/13558754/2065847

时间: 2024-08-27 13:55:16

搭建部署 分布式ELK平台 (一)的相关文章

搭建部署 分布式ELK平台 (二)

logstash ? logstash 是什么 – logstash是一个数据采集.加工处理以及传输的工具 ? logstash 特点: – 所有类型的数据集中处理 – 不同模式和格式数据的正常化 – 自定义日志格式的迅速扩展 – 为自定义数据源轻松添加插件 ? logstash 安装 – Logstash 依赖 java 环境,需要安装 java-1.8.0-openjdk – Logstash 没有默认的配置文件,需要手动配置 – logstash 安装在 /opt/logstash 目录下

CentOS7搭建开源分布式搜索平台ELK实现日志实时搜索并展示图表

    一.简介  Elasticsearch是个基于Lucene实现的开源.分布式.restful的全文本搜索引擎,此外他还是一个分布式实时文档存储,其中每个文档的每个filed均是可被索引的数据,且可被搜索,也是一个带实时分析功能的搜索引擎,能够扩展至数以百计的节点实时处理PB级别的数据.它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等.日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬

五十七.分布式ELK平台、ES安装 、 扩展插件 、Kibana安装

1. ES集群安装 准备1台虚拟机 部署elasticsearch第一个节点 访问9200端口查看是否安装成功 1ELK是日志分析平台,不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,ELK分别代表: Elasticsearch:负责日志检索和储存 Logstash:负责日志的收集和分析.处理 Kibana:负责日志的可视化 ELK组件在海量日志系统的运维中,可用于解决分布式日志数据集中式查询和管理系统监控等,故障排查,安全信息和事件管理,报表功能 部署Elasticsearch分

五、分布式elk平台、ES安装、kibanaanz

1. ES集群安装 准备1台虚拟机 部署elasticsearch第一个节点 访问9200端口查看是否安装成功 1ELK是日志分析平台,不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,ELK分别代表: Elasticsearch:负责日志检索和储存 Logstash:负责日志的收集和分析.处理 Kibana:负责日志的可视化 ELK组件在海量日志系统的运维中,可用于解决分布式日志数据集中式查询和管理系统监控等,故障排查,安全信息和事件管理,报表功能 部署Elasticsearch分

开源日志分析系统ELK平台搭建部署

开源日志分析系统ELK平台搭建部署 一.前言 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误. 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这样是不是感觉很繁琐和效率低下.当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总. 集中化管理

ELK服务搭建(开源实时日志分析ELK平台部署)(低版本—简单部署)

开源实时日志分析ELK平台部署 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误. 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这样是不是感觉很繁琐和效率低下.当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总. 集中化管理日志后,日志的

[Big Data - ELK] ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自: http://baidu.blog.51cto.com/71938/1676798 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误. 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这

Windows环境下ELK平台的搭建

.背景 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误. 通常,日志被分散的储存不同的设备上.如果需要管理数十上百台服务器,必须依次登录每台机器的传统方法查阅日志,这样很繁琐和效率低下.当务之急是使用集中化的日志管理,开源实时日志分析ELK平台能够完美的解决上述所提到的问题. 2.工具 ELK由ElasticSearch(ES).Logs

从头开始搭建分布式日志平台的docker环境

上篇(spring mvc+ELK从头开始搭建日志平台)分享了从头开始搭建基于spring mvc+redis+logback+logstash+elasticsearch+kibana的分布式日志平台,是在windows平台下操作的,这篇主要是将这些软件环境全部在linux+docker折腾一遍. 我们的目的是需要在docker中安装像resis,elk这些软件环境,由于我是windows平台,搜索一把找到了boot2docker,但在安装时提示需要用dockermachine来安装,dock