ELK(一)使用docker搭建elasticsearch

文章目录

        • 为什么要搭建ELK
        • ELK Stack的介绍
        • ELK Stack的架构图
        • es介绍
          • 基本概念
          • es基础环境搭建
          • docker部署es

为什么要搭建ELK

介绍: ELK是es,logstash和kibana三者的组合,他们是同一家公司开发的,在企业中经常用于进行日志采集

为啥搭建ELK呢?

  • 开发人员在排查故障的时候经常需要看日志,在有些公司开发人员是没有权限登录上服务器的,有些可以登录,但是权限很少,如果某个业务,部署了很多的服务器,日志也会很多,想看日志的时候,为了方便开发人员,部署ELK
  • 对于运维人员来讲,虽然可以登录服务器查看日志,但是相比使用grep,sed等Linux命令查看,ELK会更加的直观。随着服务器越来越多,日志类型,等等越来越多,ELK的优势就显示出来了

ELK Stack的介绍

ELK Stacks是一个技术栈的组合,分别是Elasticsearch、Logstash、Kibana

  • es:它的官方描述是,es是一个Restful风格的搜索和数据分析引擎,es是ELK Stack的核心,存储着我们的数据,也可以理解为一个分布式的数据库
  • logstash:logstash是一个管道,是服务端的数据处理管道,它可以从同时从多个来源采集数据
  • Kibana:Kibana是仪表盘,进行数据的可视化
  • Beans:轻量级采集器的平台,从边缘机器向 Logstash 和 Elasticsearch 发送数据。
  • FileBean:轻量级的日志采集器

ELK Stack的架构图

数据输入到logstash中,然后logstash进行处理后分发给es,然后es进行处理,然后kibana进行数据的可视化。

logstash里面有3个关卡,Input,Filter和Output

  • Input:输入,输出数据可以是Stdin、File、TCP、Redis、Syslog等。
  • Filter:过滤,将日志格式化。有丰富的过滤插件:Grok正则捕获、Date时间处理、Json编解码、Mutate数据修改等。
  • Output:输出,输出目标可以是Stdout、File、TCP、Redis、ES等。

es介绍

es博主没有深入研究,据说es内容非常多,这里我先介绍一下基本概念和基础环境搭建

基本概念
  • Node:运行单个ES实例的服务器
  • Cluster:一个或多个节点构成集群 ,一般会配置成奇数,防止脑裂的问题
  • Index:索引是多个文档的集合
  • Document:Index里每条记录称为Document,若干文档构建一个Index
  • Type:一个Index可以定义一种或多种类型,将Document逻辑分组
  • Field:ES存储的最小单元
  • Shards:ES将Index分为若干份,每一份就是一个分片 ,每个分片都在不同的node上,它也是一个提高并发的关键
  • Replicas:Index的一份或多份副本

类比对应关系

ES MySQL
Index DB
Type Table
Document Row
Field Column
es基础环境搭建

首先把SElinux关闭,然后清空iptables,我们自己编写一条iptables链,允许我们局域网上的主机可以进行通信,然后还要使用ntp进行时间同步,因为我们查看日志很多时候都是根据时间查的,所以配置这几台es服务器时间同步。

ELK(一)使用docker搭建elasticsearch_第1张图片
ELK(一)使用docker搭建elasticsearch_第2张图片

docker部署es

基础环境安装

yum -y install gcc
yum -y install gcc-c++

安装docker的依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

安装docker

yum -y install docker-ce

启动docker

systemctl start docker

查看docker系统版本

[root@lvs roles]# docker version
Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b
 Built:             Wed Mar 11 01:27:04 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b
  Built:            Wed Mar 11 01:25:42 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

配置docker镜像加速,这里每个人的都是不一样的,直接使用菜鸟教程那个:菜鸟教程镜像加速教学

[root@lvs roles]# sudo mkdir -p /etc/docker
[root@lvs roles]# sudo tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://0lmclr63.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://0lmclr63.mirror.aliyuncs.com"]
}

重新启动docker并拉取es镜像

[root@lvs roles]# sudo systemctl daemon-reload
[root@lvs roles]# sudo systemctl restart docker
[root@lvs roles]# docker pull elasticsearch:7.2.0
7.2.0: Pulling from library/elasticsearch
8ba884070f61: Pull complete 
2211b14f8b24: Pull complete 
617ccdb47f3d: Pull complete 
915ee6b2c338: Pull complete 
b414b7f29a7d: Pull complete 
547bfdd35d62: Pull complete 
8353a2ed248c: Pull complete 
Digest: sha256:84b5bc2fd15b0f1f5bf78c8c6ee34b6ae5a46ab81be1c2cfa678eea0c6457a46
Status: Downloaded newer image for elasticsearch:7.2.0
docker.io/library/elasticsearch:7.2.0
[root@lvs roles]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
elasticsearch       7.2.0               0efa6a3de177        10 months ago       861MB

查找Elasticsearch启动文件,把Jvm内存的1G改成512m,

[root@lvs roles]# find /var/lib/docker -name jvm.options
/var/lib/docker/overlay2/f71eb89609a63a340a587968d11bdfc01f4deb1461811d2cc9445c69b4ecc3f7/diff/usr/share/elasticsearch/config/jvm.options
[root@lvs roles]# vim /var/lib/docker/overlay2/f71eb89609a63a340a587968d11bdfc01f4deb1461811d2cc9445c69b4ecc3f7/diff/usr/share/elasticsearch/config/jvm.options

ELK(一)使用docker搭建elasticsearch_第3张图片
使用docker创建es容器在后台运行并查看es进程

[root@lvs roles]# docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.2.0
a3bddb30f86ae0d1986cae3d58c272ae703bfa7402a2797304a2477252ee7e8b
[root@lvs roles]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
a3bddb30f86a        elasticsearch:7.2.0   "/usr/local/bin/dock…"   10 seconds ago      Up 9 seconds        0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   es

docker inspect es查看IP地址
ELK(一)使用docker搭建elasticsearch_第4张图片
访问测试

[root@lvs roles]# curl 172.17.0.2:9200
{
  "name" : "a3bddb30f86a",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "h-RTgPL8SJGEQBVeAuJ7Rw",
  "version" : {
    "number" : "7.2.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "508c38a",
    "build_date" : "2019-06-20T15:54:18.811730Z",
    "build_snapshot" : false,
    "lucene_version" : "8.0.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

查看集群节点(这里还没有配置集群,介绍一下)

[root@lvs roles]# curl -XGET 'http://172.17.0.2:9200/_cat/nodes?pretty'
172.17.0.2 35 46 0 0.03 0.05 0.04 mdi * a3bddb30f86a

查看集群健康状态

[root@lvs roles]# curl -i -XGET http://172.17.0.2:9200/_cluster/health?pretty
HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 467

{
  "cluster_name" : "docker-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "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
}

显示green,说明非常健康

  • green:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
  • yellow:所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果 更多的 分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。
  • red:至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。
  • green/yellow/red 状态是一个概览你的集群并了解眼下正在发生什么的好办法。

你可能感兴趣的:(ELK,docker)