什么是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地址