ELK之一-----Elasticsearch介绍与部署

什么是ELK

ELK介绍

通俗来讲ELK是由Elasticsearch、Logstash、Kibana三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,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地址

 

 

 

 

 

 

 

 

  

  

 

 

posted @ 2020-03-19 17:47  一叶知秋~~  阅读(1592)  评论(0编辑  收藏  举报