ELK部署+Elastalert
前言
本文是ELK部署调试文档,ELK是由kibana、elasticsearch、logstash三个软件组成的,三个人软件的作用分别是,数据展示、日志存储以及检索、日志采集。
ELK的部署方式有多种,可以使用yum安装,也可以使用rpm安装。两种部署方式没有什么区别,都是下载rpm文件到本地进行安装,不同点是yum部署方式是在操作系统中添加一个源,然后直接下载该软件包,由于国内外的网络传输情况严峻,经常出现的一种情况是,下载中断,或者下载文件的时候在一定程度上直接无法进行。并且由于网络问题导致的各种 time out情况发生较多(自己可以科学上网的、自己有梯子的情况除外),建议直接在浏览器中下载,然后安装即可。
由于kibana、elasticsearch、logstash都是基于java环境进行运行的,所以需要java环境,才可以顺利的安装。
部署方式采用的rpm安装、建议使用rpm包安装
部署过程参考官方文档
Install Kibana with RPM | Kibana Guide [7.10] | Elastic
软件包下载
Download Kibana Free | Get Started Now | Elastic
Download Elasticsearch | Elastic
Download Logstash Free | Get Started Now | Elastic
PS:注意kibana、elasticsearch、logstash均依赖于java,所以在部署之前需要部署java
- 部署概述
本文为本人部署ELK的过程包括调试。如遇到特殊情况,或者单个服务调试情况,可以参考附录,通过单点测试,找出问题所在点,在针对性的解决问题。
一般情况下部署会如文档所示进行,部署过程中需知,各个软件的用途,以及功能。
Logstash作为一个日志采集的客户端,或日志信息消费者,它主要的作用是将数据格式化,按照一定的格式将数据传输至elasticsearch,除了数据格式化外,logstash最大的作用是,对日志信息进行正则匹配切割,将日志切割为各个字段,然后可以根据特定的需求对字段进行改造(字段名称修改、字段删除、字段添加、字段拼接、字段属性显示等),改造后的数据通过一定的选择,最红存储在elasticsearch上。
Elasticsearch是一个分布式的搜索引擎,可以通过一定的方式从自身的数据存储中快速的检索必要的数据,以便在前段展示出,值得注意的是该组件的分布式节点,可以随时添加,以便保证高可用,并且最少保持3节点集群状态。
Kibana是一个显示软件,可以索引数据,按照一定的方式呈现给用户,基于数据的类型和数据的模式,可以呈现为图表,统计表、地图等等
基于实际情况,部署需要保持组件的高可用,采用以下的部署
其中利用redis集群或者redis冷备(keepavlied)来保证业务的高可用(redis主要是作用是利用缓存,降低logstash的内存开销),filebeta用来替代logstash(可以免于安装java环境)收集客户端日志。
- ELK部署
本次部署采用的环境以及软件情况如下所示
名称 |
软件版本 |
System |
Centos 7.5 |
Java jdk |
java-1.8.0-openjdk.x86_64 |
elasticsearch |
elasticsearch-7.10.2-x86_64.rpm |
kibana |
kibana-7.10.2-x86_64.rpm |
logstash |
logstash-7.10.2-x86_64.rpm |
- 换国内源
由于默认的国外源存在网络问题,所以第一步就是将所有的yum源替换为国内的源
rm -rf /etc/yum.repos.d/* && \
curl http://mirrors.163.com/.help/CentOS7-Base-163.repo -o /etc/yum.repos.d/CentOS-Base.repo && \
curl http://mirrors.aliyun.com/repo/epel-7.repo -o /etc/yum.repos.d/epel.repo && \
yum clean all && yum makecache
- 环境部署
PS:注意一定要在部署软件之前安装java!!!!!!!!!!!!!!!
yum install -y java-1.8.0-openjdk.x86_64
- 软件下载
首先通过浏览器下载各个软件,以下是下载地址,如果网络环境好的情况下,可以直接使用wget下载软件(记得先安装wget :yum install -y wget)
- elasticsearch的下载地址
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-x86_64.rpm
- kibana的下载地址
https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-x86_64.rpm
- logstash的下载地址
https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-x86_64.rpm
- 软件安装
将下载好的软件分别上传至对应的服务器
- Elasticsearch安装
登录elasticsearch服务器安装elasticsearch
yum localinstall -y elasticsearch-7.10.2-x86_64.rpm
- logstash安装
登录logstash服务器安装logstash
yum localinstall -y logstash-7.10.2-x86_64.rpm
- kibana安装
登录kibana服务器安装kibana
yum localinstall -y kibana-7.10.2-x86_64.rpm
- ELK配置
- 环境初始化
配置linux的系统配置,以便保证程序可以正常运行
echo "vm.max_map_count = 655360" >> /etc/sysctl.conf&& sysctl -p
修改selinux去掉系统对于程序的限制
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config && setenforce 0
关闭防火墙防止软件之间连接出现错误
systemctl disable --now firewalld
- 配置elasticsearch
登录elasticsearch服务器修改配置文件
配文文件位置:/etc/elasticsearch/elasticsearch.yml
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: ELK-Cluster
##ELK的集群名称,名称相同即属于是同一个集群
node.name: elk-node1
##本机在集群内的节点名称
path.data: /elk/data
##数据存放目录,自定义路径后需要给与权限
path.logs: /elk/logs
##日志保存目录,自定义路径后需要给与权限
network.host: 0.0.0.0
##监听的IP地址
http.port: 9200
##服务监听的端口,一定要打开
discovery.zen.ping.unicast.hosts: ["192.168.1.31", "192.168.1.32"]
##单播配置一台即可
配置文件保存后退出即可
#创建数据目录,并且赋予权限
mkdir -p /elk/{data,logs}
chown elasticsearch.elasticsearch /elk/ -R
配置验证,使用以下命令查看配置文件
grep ^[a-Z] /etc/elasticsearch/elasticsearch.yml
更新并启动服务
systemctl daemon-reload &&systemctl restart elasticsearch
加入开机启动项,查看服务状态
systemctl enable --now elasticsearch && systemctl status elasticsearch
如果部署运行状态,请查看附录elasticsearch部分解决问题
- 配置logstash
Logstash稍微特殊一点,该服务无需部署时候无需配置文件,直接运行启动即可
在目录/etc/logstash/conf.d/下创建一个文件,假设文件名是tcp.conf
input {
syslog {
port => 514
}
##监听TCP端口514和UDP端口514(syslog默认使用的日志发送端口,部分采用UDP,部分采用TCP)
}
filter {
grok {
match => { "message" => "%{HOSTNAME:mingzi} %%%{DATA:alert_type}: %{GREEDYDATA:action}" }
}
##grok 利用match进行日志正则匹配,将字段划分开
mutate{
remove_field => ["message"]
##去掉源 message字段
remove_field => ["facility"]
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
##输出至elasticsearch服务器,该处填写elasticsearch的ip和端口
index => "switch-tcp-log-%{+YYYY.MM.dd}"
##此处是定义elasticsearch中的记录索引名称
}
}
保存文件后使用以下命令检测配置文件是否正确(仅仅可以检查出语法错误,无法保证运行不出错,如果检测出错误,会直接显示出配置错误的位置)
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tcp.conf -t
使用以下命令启动
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tcp.conf
如果遇到问题,请查阅附录部分的logstash
- 配置kibana
直接使用以下指令修改配置文件即可,需要注意的是将连接地址修改为elasticsearch的地址,只有这样kibana才可以从elasticsearch获取数据进行展示
sed -i "s/#server.port:5601/server.port: 5601/g"/etc/kibana/kibana.yml
##注意该项配置是定义前段访问端口的
sed -i "s/#server.host:\"localhost\"/server.host:\"0.0.0.0\"/g" /etc/kibana/kibana.yml
##改配置是kibana的绑定地址,绑定为0.0.0.0后就是允许所有的本地地址进行连接,此时访问主机的任意一个IP地址都可以连接
sed -i "s/#i18n.locale: \"en\"/i18n.locale: \"zh-CN\"/g" /etc/kibana/kibana.yml
##该配置是将默认的英文显示改成中文显示
PS:此时需要修改一个配置,即kibana连接elasticsearch的地址
Vim /etc/kibana/kibana.yml
##该地址是连接elasticsearch的地址,需要手动修改
启动服务并且加入开机启动项
systemctl enable --now kibana
查看kibana的状态
systemctl status kibana
- 页面展示
http://172.29.130.118:5601/app/home#/
在kibana中创建一个索引
创建完成后打开discover即可
- ELK持久化
logstash较为特殊的持久化运行较为特殊,可以采用以下命令
nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tcp.conf &
- ELK告警
告警采用的是elastalert
首先需要python 3.6
告警脚本使用的是 duanxin3.py
- 部署python 3.6
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-develvim git wget net-tools python-pip
mkdir -p /usr/local/python3 && cd /usr/local/python3
wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
tar zxvf Python-3.6.9.tgz $ cd Python-3.6.9 && ./configure --prefix=/usr/local/python3 $ make && make install
# 将python2 软链删除,换成python3
rm -f /usr/bin/python
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python
rm -f /usr/bin/pip
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade setuptools
git clone https://github.com/Yelp/elastalert.git
pip install "setuptools>=11.3"
- 创建ElastAlert索引
elastalert-create-index
- 定义ElastAlert配置文件
##配置文件在下载的文件路径下,例如使用git clone https://github.com/Yelp/elastalert.git 那么文件就在 执行命令的路径下的elastalert文件夹中
cp config.yaml.example config.yaml
定义好elasticsearch的地址以及端口
- 定义ElastAlert规则文件
##规则文件所在的目录是 当前目录的 ./elastalert/example_rules/
cp example_frequency.yaml my-rule.yaml
es_host: 127.0.0.1
##Elasticsearch服务器IP地址
es_port: 9200
##Elasticsearch服务器端口
name: test_command
## elastalert规则名称
type: frequency
## elastalert告警类型
index: switch*
## elastalert对elasticsearch的索引规则
num_events: 5
## 索引日志的数量
timeframe:
minutes: 1
##时间间隔
filter:
- query:
query_string:
query: "*1*"
##定义索引方式,索引字段为 *1*
alert:
- command
##执行的动作名称
pipe_match_json: true
##允许elastalert获取索引字段信息
command: ["/root/duanxin3.py"]
##执行命令
- 告警脚本
脚本内容如下所示,将告警脚本保存至elastalert服务器的某个位置,给执行权限即可,通过elastalert调用该脚本进行告警
import requests
import sys
import os
import json
sms_gateway = 'http://sms.intra.jbkt01.com:8081/v1/sms'
tousers = ["13645154441","17314874823"]
message = sys.stdin.read()
message = message.replace(",","\n")
headers = {'Content-Type': 'application/json; charset=utf-8'}
for touser in tousers:
data = {
"mobile": touser,
"content": message,
"sign": "【江北科投云】"
}
print("@@1@@",data,type(data))
info=requests.post(sms_gateway, data=json.dumps(data), headers=headers)
print(info)
print(info.text)
附录
- Elasticsearch
- 内存锁定
修改配置文件后重新启动即可
Vim /etc/elasticsearch/elasticsearch.yml
bootstrap.memory_lock: true
# 配置文件修改为内存锁定
vim /usr/lib/systemd/system/elasticsearch.service
# 在[Service]下加入下面这行内容
LimitMEMLOCK=infinity
sed -i "s/-Xms1g/-Xms2g/g" /etc/elasticsearch/jvm.options
sed -i "s/-Xmx1g/-Xmx2g/g"/etc/elasticsearch/jvm.options
# 修改配置上述黄底的配置,建议配置为服务器的50%
- logstash
- 程序调试
如果配置文件无法运行,那么直接使用平路输出即可
###验证标准输出
/usr/share/logstash/bin/logstash -e 'input { stdin {} } output { stdout { codec => rubydebug} }'
测试屏幕输出后
- kibana
- elastalert
- redis
- redis部署
1、redis单节点部署(使用keepavlied做的冷备)
yum install -y redis
2、修改配置文件
vim redis.conf
daemonize yes
bind 0.0.0.0
3、启动服务
systemctl enable --now redis
查看redis状态
systemctl status redis
- Redis-output配置
以下配置是示例,配置写入logstash 的conf文件中启动后即可
output {
redis {
##定义logstash的输出行为
data_type => "list"
##输出的数据类型为列表
host => "192.168.1.30"
##输出的目标redis的地址是192.168.1.30
password => "123321"
##输出的目标redis的目标的密码是 123321
port => "6379"
##输出的目标redis的目标的端口6379
db => "0"
##输出的目标redis的目标库为 0
key => "systemlog"
##输出的目标redis的索引key 为systemlog
}
}
- Redis-input 配置
该部分配置文件写入logstash,启动即可
input {
redis {
##定义一个redis输入行为
data_type => "list"
##定义一个数据类型,数据类型为 list
host => "192.168.1.30"
##定义一个输入redis主机地址
password => "123321"
##输入的目标redis的目标的密码是 123321
port => "6379"
##输入的目标redis的目标的端口6379
db => "0"
##输入的目标redis的目标库为 0
key => "systemlog"
##输入的目标redis的索引key 为systemlog
}
}
- filebate
- 部署filebate
直接安装,然后修改配置文件即可
Yum localinstall -y filebeat-7.10.2-x86_64.rpm
- 配置filebate
filebeat.inputs:
- type: log
#定义一个输入类型
enabled: true
#该类型是否弃用
paths:
#该文件的读取路径
- /var/log/messages
output.redis:
hosts: ["172.29.130.120:6379"]
#定义redis服务器及端口
key: log
#这里自定义key的名称,为了后期处理
db: 0
- Other
ELK部署+Elastalert相关推荐
- CentOS下ELK基于ElastAlert实现日志的微信报警
转载来源 :ELK基于ElastAlert实现日志的微信报警 : https://www.jianshu.com/p/f31c0d6020fe 一.ElastAlert介绍 在日志管理上我们使用Ela ...
- 分布式实时日志分析解决方案ELK部署架构
分布式实时日志分析解决方案ELK部署架构 参考文章: (1)分布式实时日志分析解决方案ELK部署架构 (2)https://www.cnblogs.com/zhangjianbin/p/7965867 ...
- 分布式实时日志分析解决方案 ELK 部署架构
一.前言 ELK 已经成为目前最流行的集中式日志解决方案,它主要是由Beats.Logstash.Elasticsearch.Kibana等组件组成,来共同完成实时日志的收集,存储,展示等一站式的解决 ...
- ELK 部署手册(docker版本)
ELK 部署手册(docker版本) 说明: elasticsearch.kibana.logstash.filebeat 版本要一致,elasticsearch-head 方便通过浏览器查看elas ...
- 日志分析平台ELK部署初学
1)ELK介绍 ELK官方网站:https://www.elastic.co/products elk-docker 官网:http://elk-docker.readthedocs.org/#ins ...
- centos7环境下ELK部署之elasticsearch
es部署:es只能用普通用户启动 博客园首发,转载请注明出处:https://www.cnblogs.com/tzxxh/p/9435318.html 一.环境准备: 安装jdk1.8.创建普通用户 ...
- elk告警 elastalert安装 钉钉消息(一)
ELK日志报警插件ElastAlert 公司最近上线新的产品,使用了华为云的相关elk组件,所以相关告警插件Sentinl等不是很好安装 于是就想着使用elastalert试试,摸索阶段,仅供参考.将 ...
- ELKStack入门篇(一)之ELK部署和使用
一.ELKStack简介 1.ELK介绍 中文指南:https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details ELK Stack包 ...
- ELK部署+filebeat应用
系统配置:CentOS Linux release 7.6.1810 (2核1536M,机器配置问题,容易踩很多坑,特别是低配置,jvm参数可能需要去调整,不然起不来) ELK版本:7.10.2 el ...
最新文章
- Linux之DNS服务
- java建立_利用Java创建Windows服务
- VTK:vtkPlotArea用法实战
- HDU2089——不要62 (数位DP)
- 方法数超了65535 无法安装的解决方案
- linux 指令引用变量,Linux之变量引用与命令替换
- 清华大学《操作系统》(十一):处理机调度
- java zip_Java压缩技术(二) ZIP压缩——Java原生实现
- Java直接插入排序
- wiki(维基)系统
- php文字如何排版,文字如何实现完美UI?文本排版设计告诉你
- 2022.10.23高沿坪易地扶贫 霜降
- MapReduce作业运行机制
- yigo基础学习笔记4_业务报表
- 在U-boot中添加以太网驱动-Nazgul
- 到底什么是 路由器(router)、交换机(switch)
- 句法分析(PCFG,Transition-based parsing)
- 2022-04-30前端周报 巴厘岛项目交接.md
- 大海行船靠舵手,北森用海量数据记录中国领导力的五年跃迁
- Android判断两个时间戳是否是一天