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

  1. 部署概述

本文为本人部署ELK的过程包括调试。如遇到特殊情况,或者单个服务调试情况,可以参考附录,通过单点测试,找出问题所在点,在针对性的解决问题。

一般情况下部署会如文档所示进行,部署过程中需知,各个软件的用途,以及功能。

Logstash作为一个日志采集的客户端,或日志信息消费者,它主要的作用是将数据格式化,按照一定的格式将数据传输至elasticsearch,除了数据格式化外,logstash最大的作用是,对日志信息进行正则匹配切割,将日志切割为各个字段,然后可以根据特定的需求对字段进行改造(字段名称修改、字段删除、字段添加、字段拼接、字段属性显示等),改造后的数据通过一定的选择,最红存储在elasticsearch上。

Elasticsearch是一个分布式的搜索引擎,可以通过一定的方式从自身的数据存储中快速的检索必要的数据,以便在前段展示出,值得注意的是该组件的分布式节点,可以随时添加,以便保证高可用,并且最少保持3节点集群状态。

Kibana是一个显示软件,可以索引数据,按照一定的方式呈现给用户,基于数据的类型和数据的模式,可以呈现为图表,统计表、地图等等

基于实际情况,部署需要保持组件的高可用,采用以下的部署

其中利用redis集群或者redis冷备(keepavlied)来保证业务的高可用(redis主要是作用是利用缓存,降低logstash的内存开销),filebeta用来替代logstash(可以免于安装java环境)收集客户端日志。

  1. 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

    1. 换国内源

由于默认的国外源存在网络问题,所以第一步就是将所有的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

    1. 环境部署

PS:注意一定要在部署软件之前安装java!!!!!!!!!!!!!!!

yum install -y java-1.8.0-openjdk.x86_64

    1. 软件下载

首先通过浏览器下载各个软件,以下是下载地址,如果网络环境好的情况下,可以直接使用wget下载软件(记得先安装wget :yum install -y wget)

  1. elasticsearch的下载地址

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-x86_64.rpm

  1. kibana的下载地址

https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-x86_64.rpm

  1. logstash的下载地址

https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-x86_64.rpm

    1. 软件安装

将下载好的软件分别上传至对应的服务器

  1. Elasticsearch安装

登录elasticsearch服务器安装elasticsearch

yum localinstall -y elasticsearch-7.10.2-x86_64.rpm

  1. logstash安装

登录logstash服务器安装logstash

yum localinstall -y logstash-7.10.2-x86_64.rpm

  1. kibana安装

登录kibana服务器安装kibana

yum localinstall -y kibana-7.10.2-x86_64.rpm

  1. ELK配置

  1. 环境初始化

配置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

  1. 配置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部分解决问题

  1. 配置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

  1. 配置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

  1. 页面展示

http://172.29.130.118:5601/app/home#/

在kibana中创建一个索引

创建完成后打开discover即可

  1. ELK持久化

logstash较为特殊的持久化运行较为特殊,可以采用以下命令

nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tcp.conf &

  1. ELK告警

告警采用的是elastalert

首先需要python 3.6

告警脚本使用的是 duanxin3.py

  1. 部署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-devel vim 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

  1. elastalert 部署

git clone https://github.com/Yelp/elastalert.git

cd elastalert

pip install "setuptools>=11.3"

python3 setup.py install

    1. 创建ElastAlert索引

elastalert-create-index

    1. 定义ElastAlert配置文件

##配置文件在下载的文件路径下,例如使用git clone https://github.com/Yelp/elastalert.git 那么文件就在 执行命令的路径下的elastalert文件夹中

cp config.yaml.example config.yaml

定义好elasticsearch的地址以及端口

    1. 定义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"]

##执行命令

  1. 告警脚本

脚本内容如下所示,将告警脚本保存至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)

附录

  1. Elasticsearch
    1. 内存锁定

修改配置文件后重新启动即可

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%

  1. logstash
  1. 程序调试

如果配置文件无法运行,那么直接使用平路输出即可

###验证标准输出

/usr/share/logstash/bin/logstash -e 'input { stdin {} } output { stdout { codec => rubydebug} }'  

测试屏幕输出后

  1. kibana

  1. elastalert

  1. redis
  1. 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

  1. 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

      }

}

  1. 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

    }

}

  1. filebate
  1. 部署filebate

直接安装,然后修改配置文件即可

Yum localinstall -y filebeat-7.10.2-x86_64.rpm

  1. 配置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

  1. Other

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
部署ELK(Elasticsearch, Logstash, Kibana)和Zabbix可以提供强大的日志和监控功能。下面是一个简单的ELK和Zabbix部署步骤的概述: 1. 安装和配置Elasticsearch: - 下载并安装Elasticsearch。 - 配置Elasticsearch的`elasticsearch.yml`文件,指定节点名称、监听地址等配置。 - 启动Elasticsearch服务。 2. 安装和配置Logstash: - 下载并安装Logstash。 - 创建一个Logstash配置文件,指定输入、过滤器和输出。 - 启动Logstash服务。 3. 安装和配置Kibana: - 下载并安装Kibana。 - 配置Kibana的`kibana.yml`文件,指定Elasticsearch的地址等配置。 - 启动Kibana服务。 4. 配置日志数据源(例如,服务器日志): - 确保服务器上的日志文件可读取,并根据需要进行格式化。 - 在Logstash配置文件中指定要收集的日志文件路径和格式。 5. 配置Zabbix: - 下载并安装Zabbix Server。 - 创建Zabbix数据库,并为Zabbix Server配置数据库连接。 - 配置Zabbix Server的`zabbix_server.conf`文件,指定监听IP地址、数据库信息等配置。 - 启动Zabbix Server服务。 6. 设置监控项和触发器: - 在Zabbix Web界面中创建主机和监控项,设置需要监控的指标(例如CPU、内存、磁盘等)。 - 创建触发器,定义当指标达到某个阈值时触发的动作(例如发送警报、执行脚本等)。 7. 可选:集成Zabbix和ELK: - 配置Zabbix的ELK插件,以将Zabbix的告警事件发送到Elasticsearch。 - 在Kibana中创建相应的索引模式和可视化仪表板,以展示Zabbix的监控数据。 请注意,以上步骤只是一个概述,并且在实际部署过程中可能会有更多的配置和调整。建议参考官方文档和相关教程以获取更详细的步骤和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值