CentOS 7下ELK(6.2.4)++LogStash+Filebeat+Log4j日志集成环境搭建
本文来自转载:https://www.cnblogs.com/JetpropelledSnake/p/9893566.html
0x01 环境说明与准备
Filebeat一般安装在产生日志的服务器,这里tomcat在windows 10 x64下,所以Filebeat也需要安装在windows下。
# CentOS 7.4 64位 ip 192.168.26.135
# 防火墙关闭 Selinux关闭
版本为安装时的最新版本:
# Elasticsearch 6.2.4 # Kibana 6.2.4 # Logstash 6.2.4
# elasticsearch-head(从github直接clone)
# filebeat 6.2.4
# phantomjs-2.1.1-linux-x84_64 (配合npm指令使用)
# node-v4.9.1-linux-x64 (记住文件夹路径,需要增加到bash_profile中)
从官网下载并解压。
因为ES主要通过restful api对外提供服务,所以一般安装ES时顺带安装elasticsearch-head,它提供了web控制台。
elasticsearch-head通过源码的方式托管在git上,所以需要安装下git,直接yum安装即可。
# yum install git
同时elasticsearch-head是一个nodejs应用,所以还需要具有node, 需要安装phantomjs。(安装教程可以参考)
所以在正式开始前,我们需要确保centos下下列基础设施已经具备:
1、git已经安装。
# yum install git
2、如果希望源码安装nodejs,确保gcc满足node的要求,或者直接使用已经编译好的版本。
笔者直接使用编译好的版本,可从https://nodejs.org/en/download/releases/选择具体的版本,基础运行环境最好不要使用最新版本,这里我们使用v4.9。下载解压后即可用。
注意安装版本和下载解压后的文件路径,下面要加到.bash_profile中。
3、因为elk不能使用root运行,所以需要新建一个elk用户并设置环境变量。
# groupadd elk # useradd -g elk elk
设置elk用户的环境变量:
# su - elk
vim .bash_profile 增加如下:注意node-v4.9.1的文件夹路径
# export NODE_HOME=/usr/local/app/node-v4.9.1-linux-x64 # PATH=$NODE_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin # export NODE_PATH=$NODE_HOME/lib/node_modules # export PATH
4、下载ELK套件本身并解压:
# cd /usr/local/app (这是此次实验的安装路径) # wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz # wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz # wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz # wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz # git clone https://github.com/mobz/elasticsearch-head官方文档。
0x06 Filebeat安装与配置
采用Filebeat作为源端代理之后,准确的说,跟log4j已经没有关系了。所以这里假设读者知道log4j的配置,生成的文件在d:\httx\logs目录。
因为windows下Filebeat的启动脚本是使用powershell脚本编写的,所以确保安装了ps,windows 10下自带。
从https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-windows-x86_64.zip下载windows版本的filebeat。filebeat可以安装在任何目录,这里以D:\filebeat为例。
打开配置文件D:\filebeat\filebeat.yml,确保下列设置正确:
filebeat.prospectors: - type: log enabled: true #启用配置 paths: - D:\httx\logs\* #设置监控路径 #output.elasticsearch: #禁用ES写入 output.logstash: #启用logstash写入 # The Logstash hosts hosts: ["192.168.26.135:5000"]
安装与启动filebeat。
打开powershell,执行如下命令:
PS C:\Users\admin> cd 'D:\filebeat' PS D:\filebeat> .\install-service-filebeat.ps1 安全警告 请只运行你信任的脚本。虽然来自 Internet 的脚本会有一定的用处,但此脚本可能会损坏你的计算机。如果你信任此脚本,请使用 Unblock-File cmdlet 允许运行该脚本,而不显示此警告消息。是否要运行 D:\chrome下载\filebeat\install-service-filebeat.ps1? [D] 不运行(D) [R] 运行一次(R) [S] 暂停(S) [?] 帮助 (默认值为“D”): R Status Name DisplayName ------ ---- ----------- Stopped filebeat filebeat PS D:\filebeat> Start-Service filebeat PS D:\filebeat> Stop-Service filebeat
filebeat的日志在C:\ProgramData\filebeat\logs目录下,这是写死的,不知道哪里可以更改。
filebeat会定期输出日志以及遇到的异常信息。
最后,我们再回到kibana控制台,看下log4j相关的日志,如下:
左边控制要显示哪些列,比如显示来源和主机:
到此为止,整个ELK+log4j的集成本身就完成了。但是要达到高效可用的步骤,下列问题还需要进一步研究:
1、filebeat读取文件似乎是以行为单位,这在exception堆栈下是不可接受的,需要logstash或者其他方式二次处理。
2、es head的控制台应该来说作为es的监控还可以,但是作为日志交互基本上没什么用,效果太差了。kibana还不错,只不过filter不是起码应该固定么??
3、elk的详细配置以及优化。
4、filebeat日志中出现"sync.go:105: ERR Failed to publish events (host: 10.172.0.165:5044:10200), caused by: write tcp ",但是不影响日志的发送。
参考:
https://serverfault.com/questions/911440/filebeat-cant-connect-to-logstash-on-another-server
https://elasticsearch.cn/question/3157
其他:
[ERROR][logstash.plugins.registry] Tried to load a plugin's code, but failed. {:exception=>#
解决方法:运行bin/logstash-plugin install logstash-input-log4j 安装log4j插件,默认情况下,插件没有绑定,参考https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html
log4j:ERROR Could not connect to remote log4j server at [192.168.230.128]. We will try again later
解决方法:logstash的log4j监听地址由127.0.0.1改成ip比如192.168.230.128
log4j:WARN Detected problem with connection: java.net.SocketException: Connection reset by peer: socket write error
采用低版本的ELK比如2.x版本,ELK 2.x之后的版本就是5.x、6.x,3.x、4.x是跳版了的。