#ELK介绍
1. 什么是 ELK?
通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 、filebeat
三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK 又称为 ELK stack,
ELK stack 的主要优点有如下几个:
- 处理方式灵活: elasticsearch 是实时全文索引,具有强大的搜索功能
- 配置相对简单:elasticsearch 全部使用 JSON 接口,logstash 使用模块配置,kibana 的配置文件部分更简单。
- 检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
- 集群线性扩展:elasticsearch 和 logstash 都
可以灵活线性扩展
- 前端操作绚丽:kibana 的前端设计比较绚丽,而且操作简单
2. 什么是 Elasticsearch
两个端口
9200用户访问
9300集群之间做同步使用
是一个高度可扩展的开源全文搜索和分析引擎
,它可实现数据的实时全文搜索
、支持分布式可实现高可用、提供 API 接口,可以处理大规模日志数据,比如 Nginx、Tomcat、系统日志等功能。
3. 什么是 Logstash
可以通过插件实现日志收集和转发
,支持日志过滤,支持普通 log、自定义 json格式的日志解析
4. 什么是 kibana
也就是所谓的dashboard图形化界面
主要是通过接口调用 elasticsearch 的数据
,并进行前端数据可视化的展现。
5. 为什么使用 ELK?
ELK 组件在海量日志系统的运维中,可用于解决以下主要问题:
分布式日志数据统一收集
,实现集中式查询和管理- 故障排查
- 安全信息和事件管理
- 报表功能
ELK 组件在大数据运维系统中,主要可解决的问题如下:
- 日志查询,问题排查,故障恢复,故障自愈
- 应用日志分析,错误报警
- 性能分析,用户行为分析
redis用于临时缓存:因为elasticsearch的性能不一定能够撑得住
从redis取出日志:日志只能被去一次,就会被删除
一. elasticsearch 部署
这里所用的包都为7.11.2版本的
https://www.elastic.co/cn/downloads/
1. 环境初始化(两台elasticsearch)
两台elasticsearch会相互同步
注意查看依赖于那个java版本
最小化安装 Centos 7.2 x86_64 操作系统的虚拟机,vcpu 2
,内存 4G
或更多,操作系统盘50G
,主机名设置规则为linux-hostX.exmaple.com,其中host1和host2为elasticsearch
服务器,为保证效果特额外添加一块单独的数据磁盘大小为 50G
并格式化挂载到/elk
。
- 主机名和磁盘挂载:
hostnamectl set-hostname elk-1.com
mkfs.xfs /dev/sdb
mkdir /elk
mount /dev/sdb /elk/
echo " /dev/sdb /elk/ xfs defaults 0 0" >> /etc/fstab
mount -a
- 防火墙和 selinux
关闭防所有服务器的火墙和 selinux,包括 web 服务器、redis 和 logstash 服务器的防火墙和 selinux 全部关闭,此步骤是为了避免出现因为防火墙策略或 selinux 安全权限引起的各种未知问题,以下只显示了 host1 和 host2 的命令,但是其他服务器都要执行。
systemctl disable firewalld
systemctl disable NetworkManager
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
- 各服务器配置本地域名解析:
vim /etc/hosts
192.168.66.101 elk-1.com
192.168.66.102 elk-2.com
192.168.66.103 elk-3.com
192.168.66.104 elk-4.com
192.168.66.105 elk-5.com
...
- 设置 epel 源、安装基本操作命令并同步时间:
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y net-tools vim lrzsz tree screen lsof tcpdump wget ntpdate
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "*/5 * * * * ntpdate time1.aliyun.com &> /dev/null &&
hwclock -w" >> /var/spool/cron/root
systemctl restart crond
#重启检查各项配置是否生效,没有问题的话给虚拟机做快照以方便后期还原
reboot
2. 配置java环境
注意查看依赖于那个java版本
- 在两台服务器准备 java 环境
因为 elasticsearch 服务运行需要 java 环境,因此两台 elasticsearch 服务器需要安装 java 环境,可以使用以下方式安装
下 载 地 址 : http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
tar xvf jdk-11-linux-x64.tar.gz -C /usr/local/
ln -sv /usr/local/src/jdk1.8.0_121 /usr/local/jdk
ln -sv /usr/local/jdk/bin/java /usr/bin/
vim /etc/profile
export HISTTIMEFORMAT="%F %T `whoami` "
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
source /etc/profile
java -version
3. elasticsearch 并安装
下载地址:https://www.elastic.co/downloads/elasticsearch
两台服务器分别安装 elasticsearch:
yum -y localinstall elasticsearch-5.3.0.rpm
或者
安装deb包
-i安装 -c查看有什么内容
dpkg -i elasticsearch-7.12.1-amd64.deb
ES配置,及内存
编辑各 elasticsearch 服务器的服务配置文件:
grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml
#ELK 的集群名称,名称相同即属于是同一个集群
cluster.name: ELK-Cluster
#本机在集群内的节点名称(必须不一样)
node.name: elk-node1
path.data: /elk/data #数据保存目录
path.logs: /elk/logs #日志保存目
#先不要更改这个可能 会起不来
#服务启动的时候锁定足够的内存,防止数据写入swap
#bootstrap.memory_lock: true
network.host: 0.0.0.0 #监听 IP
http.port: 9200
cluster.initial_master_nodes: ["192.168.66.101", "192.168.55.102"]
修改内存限制,并同步配置文件:
内存锁定的配置参数:
https://discuss.elastic.co/t/memory-lock-not-working/70576
vim /usr/lib/systemd/system/elasticsearch.service #修改内存
限制
LimitMEMLOCK=infinity #无限制使用内存
vim /etc/elasticsearch/jvm.options
-Xms2g
-Xmx2g #最小和最大内存限制,为什么最小和最大设置一样大?
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
官方配置文档最大建议 30G 以内。将以上配置文件 scp 到 host2 并修改自己的 node 名称
修改限制–针对于elasticsearch
/etc/security/limits.conf
elasticsearch soft core unlimited
elasticsearch hard core unlimited
elasticsearch soft nproc 1000000
elasticsearch hard nproc 1000000
elasticsearch soft nofile 1000000
elasticsearch hard nofile 1000000
elasticsearch soft memlock 32000
elasticsearch hard memlock 32000
elasticsearch soft msgqueue 8192000
elasticsearch hard msgqueue 8192000
scp /etc/elasticsearch/elasticsearch.yml 192.168.15.12:/etc/elasticsearch/
拷贝过去注意修改`node.name:` 编号
目录权限更改:
各服务器创建数据和日志目录并修改目录权限为 elasticsearch
:
mkdir /elk/{data,logs}
chown elasticsearch.elasticsearch /elk/ -R
启动 elasticsearch 服务并验证:
systemctl start elasticsearch
systemctl enable elasticsearch
tail -f /elk/logs/
如果出现这种错误
说明yml文件权限不够
chown elasticsearch.elasticsearch /etc/elasticsearch/elasticsearch.yml
验证端口监听成功:应用程序为java
通过浏览器访问 elasticsearch 服务端口
192.168.66.101:9200
一.二 监控 elasticsearch 集群状态
@@安装 elasticsearch 插件之 head
可以实现对 elasticsearch 集群的状态监控与管理配置等功能。
安装 5.x 版本的 head 插件:
在 elasticsearch 5.x 版本以后不再支持直接安装 head 插件,而是需要通过启动一个服务方式,
git 地址:https://github.com/mobz/elasticsearch-head
yum install -y npm
NPM 的全称是 Node Package Manager,是随同 NodeJS 一起安装的包管理和分发工具,它很方便让 JavaScript 开发者下载、安装、上传以及管理已经安装的包。
cd /usr/local/src/
[root@linux-host1 src]#git clone git://github.com/mobz/elasticsearch-head.git
[root@linux-host1 src]# cd elasticsearch-head/
[root@linux-host1 elasticsearch-head]# yum install npm -y
[root@linux-host1 elasticsearch-head]# npm install grunt -save
[root@linux-host2 elasticsearch-head]# ll node_modules/grunt #确认生成文件
[root@linux-host1 elasticsearch-head]# npm install #执行安装
[root@linux-host1 elasticsearch-head]# npm run start & #后台启动服务
修改 elasticsearch 服务配置文件:
开启跨域访问支持,然后重启 elasticsearch 服务:
[root@linux-host1 ~]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@linux-host1 ~]# /etc/init.d/elasticsearch restart
docker 版本启动 head 插件:
[root@linux-host1 ~]# yum install docker -y
[root@linux-host1 ~]# systemctl start docker && systemctl enable docker
[root@linux-host1 ~]# docker run -d -p 9100:9100 mobz/
由于宿主机内存不足
,系统内核会将占用内存最大的进程强制 kill 掉,以保证系统的正常运行以及其他服务的正常运行
Master 与 Slave 的区别:
Master
的职责:统计各 node 节点状态信息、集群状态信息统计、索引的创建和删除、索引分配的管理、关闭 node 节点等
Slave
的职责:从 master 同步数据、等待机会成为 Master
导入本地的 docker 镜像:
[root@linux-host2 ~]# docker save docker.io/mobz/elasticsearch-head >
/opt/elasticsearch-head-docker.tar.gz #导出镜像
[root@linux-host1 src]# docker load < /opt/elasticsearch-head-docker.tar.gz #导入
[root@linux-host1 src]# docker images#验证
#从本地 docker images 启动容器
[root@linux-host1 src]# docker run -d -p 9100:9100 --name elastic docker.io/mobz/elasticsearch-head:5
1. 通过 shell 命令获取集群状态
curl -sXGET http://192.168.66.101:9200/_cluster/health?pretty=true
curl -sXGET http://ip:19201/_cat/health
获取到的是一个 json 格式的返回值,那就可以通过 python 对其中的信息进行分析,例如对 status 进行分析,
green(绿色)就是运行在正常
,
yellow(黄色)表示副本分片丢失,
red(红色)表示主分片丢失
2. python 脚本
[root@linux-host1 ~]# cat els-cluster-monitor.py
#!/usr/bin/env python
#coding:utf-8
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.15.211: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")
结果
python els-cluster-monitor.py
50
3. zabbix 添加监控
二. kibana 部署及日志收集
也就是所谓的dashboard图形化界面
Kibana 是一个通过调用 elasticsearch 服务器进行图形化展示搜索结果的开源项 目。
不需要java环境
安装并配置 kibana
可以通过 rpm 包或者二进制的方式进行安装
rpm 方式:
yum localinstall kibana-5.3.0-x86_64.rpm
deb包方式:必须于elasticearch版本一致
dpkg -i 包.deb
grep -n "^[a-Z]" /etc/kibana/kibana.yml
server.port: 5601 #监听端口
server.host: "0.0.0.0" #监听地址
#elasticsearch服务器地址
elasticsearch.hosts: ["http://192.168.66.101:9200"]
i18n.locale: "zh-CN" #支持中文
启动 kibana 服务并验证:
systemctl start kibana
systemctl enable kibana
ss -tnl | grep 5601
可能不需要
这一步
如果
连不上es----可能是权限问题
修改这个文件
可能需要长时间才能启动
查看状态:
http://192.168.66.101:5601/status
http://192.168.66.101:5601/
kibana 验证数据:
如果默认没有显示柱状的图,可能是最近没有写入新的数据,可以查看较长日期当中的数据或者通过 logstash 新写入数据即可