采集数据(fliebeat)->过滤数据(logstash)-> 存储数据(InfluxDB) -> 显示数据(Grafana)。
资源有限,我把这一套服务搭建在了一台CentOS 7的服务器上。
filebeat简述
Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放。
以下是filebeat的工作流程:当你开启filebeat程序的时候,它会启动一个或多个探测器(prospectors)去检测你指定的日志目录或文件,对于探测器找出的每一个日志文件,filebeat启动收割进程(harvester),每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后filebeat会发送集合的数据到你指定的地点。
logstash简述
Logstash 是一个开源的数据收集引擎,它具有备实时数据传输能力。它可以统一过滤来自不同源的数据,并按照开发者的制定的规范输出到目的地。
顾名思义,Logstash 收集数据对象就是日志文件。由于日志文件来源多(如:系统日志、服务器 日志等),且内容杂乱,不便于人类进行观察。因此,我们可以使用 Logstash 对日志文件进行收集和统一过滤,变成可读性高的内容,方便开发者或运维人员观察,从而有效的分析系统/项目运行的性能,做好监控和预警的准备工作等。
influxdb简述
InfluxDB 是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。
Grafana简述
Grafana 是基于JS开发的,功能齐全的度量仪表盘和图形编辑器,帮助开发人员发现问题的工具
几者之间的关系
filebeat负责收集新产生的日志数据,发送给logstash进行数据过滤,logstash输出格式化的数据到时序数据库influxdb中,grafana从influxdb数据库中读取数据实时展示,监控网站的状况,如访问量,每分钟发送的字节数,500的情况等等
打造网站日志监控系统的步骤
1. nginx服务器配置
1.1 log_format配置如下
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
1.2 对应的日志文件格式如下
192.168.154.2 - - [30/Mar/2017:01:27:09 -0700] \"GET /index.html HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\" \"-\""
2.logstash安装和配置
2.1 logstash的安装,我的版本是logstash-5.6.1-1.noarch
yum install logstash
2.2 创建自定义正则目录
# mkdir -p /usr/local/logstash/patterns
# vi /usr/local/logstash/patterns/nginx
2.3 然后写入上面自定义的正则
WZ ([^ ]*)
NGINXACCESS %{IP:remote_ip} \- \- \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{WZ:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} %{QS:referer} %{QS:agent} %{QS:xforward}
2.4 logstash.conf配置文件内容
input {
file {
path => ["/var/log/nginx/access.log"]
type => "nginxlog"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
}
output {
influxdb {
db => "influxdb中的数据库名"
host => "localhost"
port => "8086"
user => "你的账号"
password => "你的密码"
coerce_values => {
"request" => "varchar"
"status" => "varchar"
}
data_points => {
"request" => "%{request}"
"status" => "%{status}"
"referer"=>"%{referer}"
"agent"=>"%{agent}"
"method"=>"%{method}"
"remote_ip"=>"%{remote_ip}"
"bytes"=>"%{bytes}"
"host"=>"%{host}"
"timestamp"=>"%{timestamp}"
}
}
3.filebeat安装和配置
3.1filebeat的安装
我的filebeat的版本为5.1.1
yum install filebeat
3.2 filebeat的配置,配置文件一般位于/etc/filebeat/
filebeat.prospectors:
- input_type: log
paths:
- /var/log/nginx/access.log
output.logstash:
hosts: ["localhost:5044"] //监控本机的5044端口,可以自己定义需要和logstash配置文件中的beats端口一致
3.3 踩过的坑
logstash的配置文件在/etc/logstash/,我们需要设置软连接到/usr/share/logstah/config下面
ln -s /etc/logstash/* /usr/share/logstash/config/
我们设置的配置文件在/etc/logstash/conf.d/也需要软连接到/usr/share/logstash/,跟上面有所不同
ln -s /etc/logstash/conf.d/logostash.conf /usr/share/logstash/
logstash5.0以上版本移除了很多插件,包括ifluxdb插件,我们需要利用gem安装,链接如下本地以Gems包的形式安装Logstash插件
4. influxdb的安装和配置
4.1 influxdb的安装
我的版本是influxdb-1.0.2.x86_64.rpm
yum install influxdb
4.2 influxdb的配置
//管理后台配置,可以根据ip或者域名+端口号8083访问influxdb数据库的管理后台
[admin]
enabled = true
bind-address = ":8083"
[http]
enabled = true
bind-address = ":8086"
auth-enabled = false
log-enabled = true
write-tracing = false
pprof-enabled = false
https-enabled = false
https-certificate = "/etc/ssl/influxdb.pem"
max-row-limit = 10000
realm = "InfluxDB"
5. Grafana的安装和配置
5.1 Grfana的安装
我的Grfana版本是 grafana-4.2.0-1.x86_64.rpm
yum install grafana
5.2 Grafana的启动
service granfan rstart
5.3 Grafana的配置,配置数据源
5.4 开启服务后台运行,监控日志,实时显示
nohup bin/logstash -f test.conf --path.data=/var/ &
6.结束语
经过两天的学习和各种踩坑,终于构建一个非常漂亮的实时监控界面,有利于我们实时的监控网站的运行状态。