ARCHITECTURE:分布式ELK平台,ES集群

分布式ELK平台

ELK简介

来源

在微服务开发过程中,一般都会利用多台服务器做分布式部署,如何能够把分散在各个服务器中的日志归集起来做分析处理,是一个微服务服务需要考虑的一个因素。

什么是ELK

  • ELK是日志分析平台,不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,ELK分别代表:
    – Elasticsearch:负责日志检索和储存
    – Logstash:负责日志的收集和分析、处理
    – Kibana:负责日志的可视化
  • 这三款软件都是开源软件,通常是配合使用,而且又先后归于Elastic.co公司名下.故被简称为ELK

ELK能做什么

- ELK组件在海量日志系统的运维中,可用于解决
– 分布式日志数据集中式查询和管理
– 系统监控,包括系统硬件和应用各个组件的监控
– 故障排查
– 安全信息和事件管理
– 报表功能

Elasticsearch

在这里插入图片描述

主要特点

– 实时分析
– 分布式实时文件存储,并将每一个字段都编入索引
– 文档导向,所有的对象全部是文档
– 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards和Replicas)
– 接口友好,支持JSON

ES缺点

– 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 -> Dcuments -> Fields
ES       索引         类型       文档      域(字段)
Relational databaseElasticsearch
Databaseindex
TableType
RowDocument
ColumnField
SchemaMapping
IndexEverything is indexed
SQLQuery DSL
SELECT * FROM table…GET http://…
UPDATE table SETPUT http://…

Elasticsearch架构图

在这里插入图片描述

ES集群安装

在这里插入图片描述

  • 主机名
  • IP地址
  • /etc/hosts配置主机名解析
  • yum源 CentOS7-1804.iso 和
[admin@192.168.1.254 ~]$ ls /var/ftp/elk
kibana-4.5.2-1.x86_64.rpm   logstash-2.3.4-1.noarch.rpm  
repodata   filebeat-1.2.3-x86_64.rpm
  • 安装JDK
    – 要求至少java 7
    – 推荐openjdk 1.8

  • 在es1上

vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-Base
baseurl="ftp://192.168.1.254/system"
enabled=1
gpgcheck=0
[elk]
name=elk
baseurl="ftp://192.168.1.254/elk"
enabled=1
gpgcheck=0

yum -y install java-1.8.0-openjdk.x86_64
java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
sestatus  //查看selinux状态
SELinux status:                 disabled   
yum -y install elasticsearch
vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: myelk   #配置集群名字
23 node.name: es1        #当前主机名称
54 network.host: 0.0.0.0 #0.0.0.0(监听所有地址)
68 discovery.zen.ping.unicast.hosts: ["es1", "es2", "es3"]  
//声明集群里的主机成员有谁,不需要全部写进去
systemctl restart elasticsearch
systemctl enable elasticsearch
ss -antup | grep 9200
ss -antup | grep 9300
  • 查看是否成功
curl http://192.168.1.51:9200
{
  "name" : "es1",
  "cluster_name" : "myelk",
  "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"
}

部署多台es

使用ansible部署ES集群
ansible的安装部署请查看ansible基础及部署

vim elk.yml
---
- name: 批量部署elk
  hosts: es
  tasks:
    - name: 配置yum源
      copy:
        src: /etc/yum.repos.d/local.repo
        dest: /etc/yum.repos.d/local.repo
    - name: 配置主机名
      copy:
        src: /etc/hosts
        dest: /etc/hosts
    - name: 安装jdk
      yum:
        name: java-1.8.0-openjdk
        state: installed
    - name: 安装elasticsearch
      yum:
        name: elasticsearch
        state: installed
    - name: 修改elk配置文件
      copy:
        src: /etc/elasticsearch/elasticsearch.yml
        dest: /etc/elasticsearch/elasticsearch.yml
    - replace:
        path: /etc/elasticsearch/elasticsearch.yml
          regexp: 'es1$'
          replace: "${HOSTNAME}"
#或者        replace: "{{inventory_hostname}}"
    - service:
        name: elasticsearch.service
        state: started
        enabled: yes
  • 测试
firefox http://192.168.1.51:9200/_cluster/health?pretty

在这里插入图片描述

ES插件使用

head插件

在这里插入图片描述

kopf插件

在这里插入图片描述

bigdesk插件

在这里插入图片描述

安装

插件装在哪一台机器上,只能在哪台机器上使用(这里安装在es5机器上面)

cd /usr/share/elasticsearch/bin
./plugin  install  \ 
ftp://192.168.1.254/elk/elasticsearch-head-master.zip     #安装head插件

./plugin  install  \ 
ftp://192.168.1.254/elk/elasticsearch-kopf-master.zip     #安装kopf插件

./plugin install  \
ftp://192.168.1.254/elk/bigdesk-master.zip
#安装bigdesk插件

./plugin  list   #查看安装的插件
Installed plugins in /usr/share/elasticsearch/plugins:
    - head
    - kopf
    - bigdesk     

访问head插件

firefox http://192.168.1.55:9200/_plugin/head
在这里插入图片描述

访问kopf插件

firefox http://192.168.1.55:9200/_plugin/kopf
在这里插入图片描述

访问bigdesk插件

firefox http://192.168.1.55:9200/_plugin/bigdesk
在这里插入图片描述

使用head创建index
curl -X PUT "http://192.168.1.55:9200/index" -d '
> {
>     "settings":{
>     "index":{
>     "number_of_shards":5,    #分片数
>     "number_of_replicas":1   #副本数
>    }
>   }
> }'
{"acknowledged":true}

扩展插件

RESTful API

HTTP协议简介
  • http请求由三部分组成
    在这里插入图片描述
  • http请求方法
    – 常用方法GET,POST,HEAD
    – 其他方法 OPTIONS,PUT,DELETE,TRACE和CONNECT
  • ES常用
    – PUT ----增
    – DELETE ----删
    – POST -----改
    – GET —查
系统命令curl
  • 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款跟强大的http命令行工具.它支持多种请求模式,自定义请求头等强大功能,是一款综合工具
  • curl常用参数介绍
    – -A 修改请求agent
    – -X 设置请求方法
    – -i 显示返回头信息

RESTful API调用

  • Elasticsearch提供一系列RESTful的API
    – 检查集群,节点,索引的健康度,状态和统计
    – 管理集群,节点,索引的数据及元数据
    – 对索引进行CRUD操作及查询操作
    – 执行其他高级操作如分页,排序,过滤等
  • POST或PUT数据使用json格式
  • JSON
    — JSON(JavaScript Object NOtation),意思是JavaScript对象表达法,它是一种基于文本独立于语言的轻量级数据交换格式
  • RESTful API的简单使用
    – _cat API查询集群状态,节点信息
    – v参数显示详细信息
    curl http://192.168.1.51:9200/_cat/health?v
    — help显示帮助信息
    curl http://192.168.1.51:9200/_cat/health?help
    – nodes查询节点状态信息
    curl http://192.168.1.51:9200/_cat/nodes?v
    – 索引信息
    curl http://192.168.1.51:9200/_cat/indices?v
增加数据
curl -X PUT "http://192.168.1.55:9200/tedu/teacher/1" -d '{
"职业":"诗人",
"名字":"李白",
"称号":"诗仙",
"年代":"唐"
}'
{"_index":"tedu","_type":"teacher","_id":"1","_version":1,"_shards":{"total":2,"successful":2,"failed":0},"created":true}
修改数据
curl -X PUT "http://192.168.1.55:9200/tedu/teacher/1" -d '{
 "doc":{
 "年代": "唐代"
 }
 }'
{"_index":"tedu","_type":"teacher","_id":"1","_version":3,"_shards":{"total":2,"successful":2,"failed":0},"created":false}

或者

curl -X POST "http://192.168.1.55:9200/tedu/teacher/1/_update" -d '{
 "doc":{
 "年代": "唐代"
 }
 }'
{"_index":"tedu","_type":"teacher","_id":"1","_version":3,"_shards":{"total":2,"successful":2,"failed":0},"created":false}
查询数据
curl -X GET "http://192.168.1.55:9200/tedu/teacher/3?pretty"
{
  "_index" : "tedu",
  "_type" : "teacher",
  "_id" : "3",
  "found" : false
}
删除数据
curl -X DELETE "http://192.168.1.55:9200/tedu/teacher/3?pretty"
{
  "found" : false,
  "_index" : "tedu",
  "_type" : "teacher",
  "_id" : "3",
  "_version" : 1,
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  }
}
删除索引
curl -X DELETE http://192.168.1.55:9200/tedu/ #删除索引
{"acknowledged":true}
curl -X DELETE http://192.168.1.65:9200/*  #删除所有索引
{"acknowledged":true}
导入数据
gzip  -d logs.jsonl.gz
curl -X POST "http://192.168.1.51:9200/_bulk"  \ 
--data-binary @logs.jsonl
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值