zoukankan      html  css  js  c++  java
  • ELK之一-----Elasticsearch介绍与部署

    什么是ELK

    ELK介绍

    通俗来讲ELK是由Elasticsearch、Logstash、Kibana、filebeat三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK又
    称为ELK stack,官方域名为elastic.co ELK stack的主要优点有如下几个:

    • 处理方式灵活:elasticsearch 是实时 全文索引,具有强大的搜索 功能
    • 配置相对简单:elasticsearch全部使用JSON接口logstash使用模块配置kibana的配置文件部分更简单 。
    • 检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应 。
    • 集群线性扩展:elastic search和logstash都可以灵活线性扩展
    • 前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单

    什么是Elasticsearch

    是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如:Nginx 、Tomcat、系统日志等功能 。

    什么是Logstash

    可以通过插件实现日志收集和转发,支持日志过滤,支持普通log 、自定义json格式的日志解析 。

    什么是kibana

    主要是通过接口调用elasticsearch的数据,并进行前端数据可视化的展现。

    为什么使用ELK

    ELK组件在海量日志系统的运维中,可用于解决以下主要问题:

    • 分布式日志数据统一收集 ,实现 集中式查询和管理
    • 故障排查
    • 安全信息和事件管理
    • 报表功能报表功能


    ELK组件在大数据运维系统中,主要可解决的问题如下:

    • 日志查询,问题排查,故障恢复日志查询,问题排查,故障恢复,故障自愈故障自愈
    • 应用日志应用日志分析分析,错误报警,错误报警
    • 性能分析,用户行为分析性能分析,用户行为分析

    使用场景:

    部署elasticsearch集群

    以下是在两个主机上部署elasticsearch服务器

    1、安装部署JDK环境

    1、官网下载1.8.x的JDK包,并配置环境变量

    官方下载JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    [root@elk-1 src]# tar xvf jdk-8u212-linux-x64.tar.gz  # 解压JDK包
    [root@elk-1 src]# ln -sv /usr/local/src/jdk1.8.0_212/ /usr/local/jdk  #创建jdk软链接
    ‘/usr/local/jdk’ -> ‘/usr/local/src/jdk1.8.0_212/’
    [root@elk-1 src]# ln -sv  /usr/local/jdk/bin/java /usr/bin/java  # 创建java软链接
    ‘/usr/bin/java’ -> ‘/usr/local/jdk/bin/java’
    
    [root@elk-1 src]# vim /etc/profile # 修改配置文件的环境变量
    export HISTTIMEFORMAT="%F %T `whoami`"
    export export LANG="en_US.utf-8"
    export JAVA_HOME=/usr/local/jdk
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    
    [root@elk-1 src]# .  /etc/profile  # 使环境变量生效
    

    2、验证jdk版本和jdk环境

    [root@elk-1 ~]# java -version
    java version "1.8.0_212"
    Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
    Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
    [root@elk-1 ~]# echo $JAVA_HOME
    /usr/local/jdk 

    3、格式化新加的100g磁盘,并挂载到/data目录下

    [root@elk-1 src]# lsblk
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda               8:0    0  100G  0 disk 
    ├─sda1            8:1    0  512M  0 part /boot
    └─sda2            8:2    0 99.5G  0 part 
      ├─centos-root 253:0    0 99.5G  0 lvm  /
      └─centos-swap 253:1    0    4M  0 lvm  [SWAP]
    sdb               8:16   0  100G  0 disk 
    sr0              11:0    1  942M  0 rom  
    [root@elk-1 src]# mkfs.xfs /dev/sdb
    meta-data=/dev/sdb               isize=512    agcount=4, agsize=6553600 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=26214400, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=12800, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    [root@elk-1 src]# mkdir /data  # 创建一个挂载的/data目录
    

    4、开始写入到/etc/fstab配置文件中,设置为开机启动的挂载光盘,挂载完光盘之后,最好重启linux系统,查看是否真正生效

                                                                                                                                                                                                                                                                                          
    [root@elk-1 src]# vim /etc/fstab 
    # /etc/fstab
    # Created by anaconda on Sat Jan  4 16:31:31 2020
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/centos-root /                       xfs     defaults        0 0
    UUID=64d9f83a-34c5-4025-94ff-504ca7a00a3f /boot                   xfs     defaults        0 0
    /dev/mapper/centos-swap swap                    swap    defaults        0 0
    /dev/sdb               /data                     xfs    defaults       0 0   #  挂载到指定的/data目录下
    
    [root@elk-1 src]# mount -a   # 使自动挂载生效
    [root@elk-1 src]# df -Th  # 查看挂载信息
    Filesystem              Type      Size  Used Avail Use% Mounted on
    devtmpfs                devtmpfs  1.9G     0  1.9G   0% /dev
    tmpfs                   tmpfs     1.9G     0  1.9G   0% /dev/shm
    tmpfs                   tmpfs     1.9G   12M  1.9G   1% /run
    tmpfs                   tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
    /dev/mapper/centos-root xfs       100G  2.0G   98G   2% /
    /dev/sda1               xfs       509M  143M  367M  29% /boot
    tmpfs                   tmpfs     378M     0  378M   0% /run/user/0
    /dev/sdb                xfs       100G   33M  100G   1% /data
    

    2、下载并部署elasticsearch

    清华大学下载地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/6.x/yum/

    官网下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

    1、安装elasticsearch包

    [root@elk-1 src]# yum install elasticsearch-6.8.1.rpm  -y
    

    2、修改elasticsearch配置文件

    [root@elk-1 src]# vim /etc/elasticsearch/elasticsearch.yml
    bootstrap.memory_lock: true  # 开启的话就会固定占用默认的1g内存
    cluster.name: elk-cluster  # cluster集群名称,与其他集群的名称一致
    node.name: node-1  # 写一个node名称,与其他node名称不一致
    path.data: /data/esdata # 将数据保存在挂载的独立的data磁盘目录下
    path.logs: /data/eslog  #日志保存的目录
    network.host: 0.0.0.0  # 监听的IP地址
    http.port: 9200  #监听的端口号
    discovery.zen.ping.unicast.hosts: ["192.168.7.100", "192.168.7.101"]  # 写出组播地址,有几个elasticsearch就写几个IP地址
    

    3、将此配置文件传到另外一个elasticsearch主机上,修改node名称即可,实现集群分布

    [root@elk-1 src]# scp  /etc/elasticsearch/elasticsearch.yml 192.168.7.101:/etc/elasticsearch/elasticsearch.yml  #传到另外一个主机
    [root@elk-1 src]# vim /etc/elasticsearch/elasticsearch.yml
    bootstrap.memory_lock: true  # 开启的话就会固定占用默认的1g内存
    cluster.name: elk-cluster  # cluster集群名称,与其他集群的名称一致
    node.name: node-2  # 写一个node名称,与其他node名称不一致,将此处的node名称修改为node-2即可
    path.data: /data/esdata # 将数据保存在挂载的独立的data磁盘目录下
    path.logs: /data/eslog  #日志保存的目录
    network.host: 0.0.0.0  # 监听的IP地址
    http.port: 9200  #监听的端口号
    discovery.zen.ping.unicast.hosts: ["192.168.7.100", "192.168.7.101"]  # 写出两个集群单播地址,有几个elasticsearch就写几个IP地址

    修改elasticsearch内存限制,并同步配置文件(集群的两个主机都要写入)

    官方文档介绍:https://discuss.elastic.co/t/memory-lock-not-working/70576

    1、由于上面默认的最大占用固定内存是1g,生产中肯定不够使用,我们需要将占用的固定内存改为物理机内存的50%,最大不要超过32G。

    [root@elk-1 ~]# vim /usr/lib/systemd//system/elasticsearch.service 
    LimitMEMLOCK=infinity  # 修改elasticsearch启动服务的无限制使用内存
    

    2、修改elasticsearch的内存使用配置文件,将最大最小内存设置一样

    [root@elk-1 ~]# vim /etc/elasticsearch/jvm.options 
    -Xms2g  # 最小内存为2g
    -Xmx2g   # 最大内存为2g

    3、启动elasticsearch服务

    [root@elk-1 src]# chown elasticsearch.elasticsearch  /data -R  #修改两个主机挂载的数据权限,然后启动elasticsearch服务
    [root@elk-1 ~]# systemctl daemon-reload
    [root@elk-1 src]# systemctl start elasticsearch

    4、启动elasticsearch服务之后,查看log日志和端口是否已经启动,可以看到此时的9200和9300端口已经打开了。

    [root@elk-1 elasticsearch]# tail -f  /data/eslog/elk-cluster.log
    [root@elk-1 ~]# ss -nlt
    State       Recv-Q Send-Q                           Local Address:Port                                          Peer Address:Port              
    LISTEN      0      100                                  127.0.0.1:25                                                       *:*                  
    LISTEN      0      128                                          *:22                                                       *:*                  
    LISTEN      0      100                                      [::1]:25                                                    [::]:*                  
    LISTEN      0      20480                                     [::]:9200                                                  [::]:*                  
    LISTEN      0      20480                                     [::]:9300                                                  [::]:*                  
    LISTEN      0      128                                       [::]:22                                                    [::]:*   
    

    5、在网页上访问elasticsearch,查看是否能够访问:192.168.7.100:9200、 192.168.7.101:9200

    6、修改/etc/security/limits.conf配置文件,centos系统前面写*可以生效,但是ubuntu需要写上elsaticsearch用户名,才能生效。

    *                soft    core          unlimited
    *                hard    core          unlimited
    *                soft    nproc         1000000
    *                hard    nproc         1000000
    *                soft    nofile        1000000
    *                hard    nofile        1000000
    *                soft    memlock       32000
    *                hard    memlock       32000
    *                soft    msgqueue      8192000
    *                hard    msgqueue      8192000
    

    7、此时可以看到软限制和硬限制已经是最大值

    [root@elk-2 src]# ulimit -n
    1000000

    监控elasticsearch集群服务器的健康性

    用curl命令对集群的健康性状态进行检查,如果返回值是green,说明正常,是yellow,说明是副本的分片丢失,如果是red,表示主片丢失。

    [root@elk-2 ~]# curl -sXGET http://192.168.7.100:9200/_cluster/health?pretty=true  # curl的IP地址是对端集群的IP地址,非本地的IP地址
    {
      "cluster_name" : "elk-cluster",
      "status" : "green",
      "timed_out" : false,
      "number_of_nodes" : 2,
      "number_of_data_nodes" : 2,
      "active_primary_shards" : 4,
      "active_shards" : 8,
      "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
    }

     以下是编辑对集群健康性检查的python脚本,如果返回值是50,说明elasticsearch集群正常。

    #!/usr/bin/env python
    #coding:utf-8
    #Author liu
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    import subprocess
    body = ""
    false="false"
    obj = subprocess.Popen(("curl -sXGET http://192.168.7.100:9200/_cluster/health?pretty=true"),shell=True,stdout=subprocess.PIPE)
    data=obj.stdout.read()
    data1=eval(data)
    status=data1.get("status")
    if status == "green":
            print("50")
    else:
            print("100")
    

    执行脚本,返回值是50,说明集群正常。

    [root@elk-2 ~]# python  es.py
    50

    在阿里云下载安装docker-ce

    阿里云docker-ce安装地址:https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11yxp9kR

    1、yum安装docker-ce容器:以下是阿里云安装步骤

    # step 1: 安装必要的一些系统工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    # Step 2: 添加软件源信息
    sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # Step 3: 更新并安装Docker-CE
    sudo yum makecache fast
    sudo yum -y install docker-ce
    # Step 4: 开启Docker服务
    sudo service docker start
    
    # 注意:
    # 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
    # vim /etc/yum.repos.d/docker-ce.repo
    #   将[docker-ce-test]下方的enabled=0修改为enabled=1
    #
    # 安装指定版本的Docker-CE:
    # Step 1: 查找Docker-CE的版本:
    # yum list docker-ce.x86_64 --showduplicates | sort -r
    #   Loading mirror speeds from cached hostfile
    #   Loaded plugins: branch, fastestmirror, langpacks
    #   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
    #   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
    #   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
    #   Available Packages
    # Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
    # sudo yum -y install docker-ce-[VERSION]
    

    2、修改elsaticsearch配置文件

    [root@elk-1 ~]# vim /etc/elasticsearch/elasticsearch.yml  # 允许所有的插件可以访问elasticsearch
    http.cors.enabled: true  
    http.cors.allow-origin: "*"

    3、下载安装elasticsearch的插件head。

    插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,另外也有一些开发爱好者提供的插件,可以实现对 elasticsearch 集群的状态监控与管理配置等功能。

    在elasticsearch 5.x版本以后不再支持,直接安装head插件,而是需要通过启动一个服务方式。

    gitlab下载插件地址:https://github.com/mobz/elasticsearch-head/releases,下载的包有800多M。

    将下载的elasticsearch-head-5.tar.gz 包传到docker中,然后使用容器进行

    [root@elk-1 ~]# docker load -i elasticsearch-head-5.tar.gz 
    b6ca02dfe5e6: Loading layer [==================================================>]  128.9MB/128.9MB
    60a0858edcd5: Loading layer [==================================================>]  45.19MB/45.19MB
    53c779688d06: Loading layer [==================================================>]  126.6MB/126.6MB
    0a5e2b2ddeaa: Loading layer [==================================================>]  330.5MB/330.5MB
    fa18e5ffd316: Loading layer [==================================================>]  352.3kB/352.3kB
    604c78617f34: Loading layer [==================================================>]  113.7kB/113.7kB
    cf2eea3d6e04: Loading layer [==================================================>]  50.16MB/50.16MB
    d556e03b8284: Loading layer [==================================================>]   2.56kB/2.56kB
    95ea76455b84: Loading layer [==================================================>]  12.72MB/12.72MB
    ce5705289a91: Loading layer [==================================================>]  4.096kB/4.096kB
    d09533ddfc0d: Loading layer [==================================================>]  143.3MB/143.3MB
    eb415bbb4658: Loading layer [==================================================>]  23.71MB/23.71MB
    

    4、在dokcer容器中查看elasticsearch-head名称,并启动。

    [root@elk-1 ~]# docker images  # 查看elasticsearch-head镜像名称
    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
    mobz/elasticsearch-head   5                   b19a5c98e43b        3 years ago         824MB
    [root@elk-1 ~]# docker run -d -p 9100:9100 mobz/elasticsearch-head:5  # 在docker容器中映射9100端口,启动elasticsearch-head插件
    48ce2547c70b1152706d8e01e406a507d6613235177a82e9e4c271fc7ce0819a
    

    5、访问网页结果:192.168.7.100:9100,然后连接另一台集群主机的IP地址

      

      

     

  • 相关阅读:
    选择适合自己的Markdown编辑器
    学习笔记
    读书笔记:Ajax/REST架构对于侵入式Web应用的优势
    scala学习之路(三)数组
    scala学习之路(二)控制结构和函数
    scala学习之路(一)基础
    Centos7下搭建Django+uWSGI+nginx基于python3
    java Date 和 数据库Date,DateTimed
    Java IO编程
    Hive内部表,外部表,分区表的创建
  • 原文地址:https://www.cnblogs.com/struggle-1216/p/12455419.html
Copyright © 2011-2022 走看看