| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> ELK部署+Elastalert -> 正文阅读 |
|
[大数据]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环境)收集客户端日志。
本次部署采用的环境以及软件情况如下所示
由于默认的国外源存在网络问题,所以第一步就是将所有的yum源替换为国内的源
PS:注意一定要在部署软件之前安装java!!!!!!!!!!!!!!!
首先通过浏览器下载各个软件,以下是下载地址,如果网络环境好的情况下,可以直接使用wget下载软件(记得先安装wget :yum install -y wget)
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-x86_64.rpm
https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-x86_64.rpm
https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-x86_64.rpm 将下载好的软件分别上传至对应的服务器 登录elasticsearch服务器安装elasticsearch yum localinstall -y elasticsearch-7.10.2-x86_64.rpm
登录logstash服务器安装logstash yum localinstall -y logstash-7.10.2-x86_64.rpm
登录kibana服务器安装kibana yum localinstall -y kibana-7.10.2-x86_64.rpm
配置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服务器修改配置文件 配文文件位置:/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稍微特殊一点,该服务无需部署时候无需配置文件,直接运行启动即可 在目录/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 直接使用以下指令修改配置文件即可,需要注意的是将连接地址修改为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即可
logstash较为特殊的持久化运行较为特殊,可以采用以下命令 nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tcp.conf &
告警采用的是elastalert 首先需要python 3.6 告警脚本使用的是 duanxin3.py 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
git clone https://github.com/Yelp/elastalert.git cd?elastalert pip install "setuptools>=11.3" python3 setup.py install elastalert-create-index ##配置文件在下载的文件路径下,例如使用git clone https://github.com/Yelp/elastalert.git?那么文件就在?执行命令的路径下的elastalert文件夹中 cp config.yaml.example config.yaml 定义好elasticsearch的地址以及端口 ##规则文件所在的目录是?当前目录的 ./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) 修改配置文件后重新启动即可 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%
如果配置文件无法运行,那么直接使用平路输出即可 ###验证标准输出 /usr/share/logstash/bin/logstash -e 'input { stdin {} } output { stdout { codec => rubydebug} }'?? 测试屏幕输出后
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
以下配置是示例,配置写入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 ????? } }
该部分配置文件写入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 ??? } }
直接安装,然后修改配置文件即可 Yum localinstall -y filebeat-7.10.2-x86_64.rpm
filebeat.inputs: - type: log #定义一个输入类型 ? enabled: true #该类型是否弃用 ? paths: #该文件的读取路径 ??? - /var/log/messages output.redis: ? hosts: ["172.29.130.120:6379"] ?#定义redis服务器及端口 ? key: log #这里自定义key的名称,为了后期处理 ? db: 0 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:51:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |