设为首页 收藏本站
查看: 1989|回复: 0

[经验分享] 搭建部署 分布式ELK平台 (一)

[复制链接]
YunVN网友  发表于 2019-1-28 10:43:10 |阅读模式
  搭建部署 分布式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 root@192.168.4.11
  # 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 root@192.168.4.11
  # 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 查询
  – PUT 增加
  – POST 更改
  – 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" : "levineburks@amtap.com",
  "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 查看

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668606-1-1.html 上篇帖子: ELK搭建以及使用大全 下篇帖子: 基于ELK的日志分析、存储、展示
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表