日志主要包括系统日志、应用程序日志和安全日志。
开发人员可以通过日志了解服务器软硬件信息程序运行中的错误及原因。
通常,日志被分散在储存不同的设备上。
因此需要集中起来方便管理。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,
但是不够方便与可视化。
开源实时日志分析ELK平台能够完美的解决我们上述的问题
日志分析
.log -> flume -> kafka -> hdfs -> mapreduce/spark -> hbase/*
日志监控
.log -> filebeat -> logstash -> elasticSearch
由于服务并不是太多选择单节点模式,若服务应用较多则选择集群模式搭建
使用docker容器启动相应服务
暂时不需要
input {
beats {
port => "5044"
}
}
filter {
mutate {
split => ["source","/"]
add_field => {
"temp" => "%{[source][4]}"
}
remove_tag => ["beats_input_codec_plain_applied"]
}
mutate{
split => ["temp","."]
add_field => {
"level" => "%{[temp][0]}"
}
remove_field => [ "temp" ]
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["http://xxxxxx:xxx"]
index => "%{[@metadata][beat]}-%{[tags]}-%{+YYYY.MM.dd}"
document_type => "logs"
}
}
# Options for log.level:
# * fatal
# * error
# * warn
# * info (default)
# * debug
# * trace
#
log.level: info
path.logs: /var/log/logstash
filebeat.prospectors:
- input_type: log
paths:
# 指定服务日志路径
- /var/logs/xxxxx/*.log
multiline:
pattern: '^\s*("{)'
negate: true
match: after
max_lines: 1000
timeout: 30s
# 指定服务tag 用于es index
tags: ["xxxx"]
- input_type: log
paths:
- /var/logs/xxxx/*.log
tags: ["xxx"]
output:
logstash:
# 输出到logstash地址和端口号
hosts: ["xxxxx:5044"]
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream kibana{
server xxxx:5601 weight=1;
}
server {
listen xxxx;
server_name localhost;
location / {
auth_basic "auth for kibana";
auth_basic_user_file /etc/nginx/htpasswd;
proxy_pass http://kibana;
}
}
}
mkdir -p /opt/data/{elasticsearch,filebeat,kibana,logstash,nginx}/{data,logs}
mkdir -p /opt/data/logstash/{config,pipeline}
cp logstash.conf /opt/data/logstash/pipeline
cp logstash.yml /opt/data/logstash/config
cp filebeat.yml /opt/data/kibana
cp nginx.conf /opt/data/nginx
printf "xxxxx:$(openssl passwd -crypt xxxxx)\n" >> ./htpasswd
cp ./htpasswd /etc/nginx/
chmod o+rw -R /opt/data
docker run -itd --rm -9200:9200 -p9300:9300 --name es -v /opt/data/elasticsearch/logs:/usr/share/elasticsearch/logs -v /opt/data/elasticsearch/data:/usr/share/elasticsearch/data -e "discovery.type=single-node" elasticsearch:6.5.1
docker run -itd --rm -p5044:5044 -p9600:9600 --name ls -v /opt/data/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /opt/data/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -v /opt/data/logstash/data/:/usr/share/logstash/data/ logstash:6.5.1
docker run --rm --name fb -it -v /opt/data/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /var/logs/:/var/logs/ docker.elastic.co/beats/filebeat:6.5.1
docker run -itd --rm -p5601:5601 --name kb -v /opt/data/kibana/data:/usr/share/kibana/data -e ELASTICSEARCH_URL=http://xxxxx:9200 kibana:6.5.1
docker run --rm --name ng -v /opt/data/nginx/nginx.conf:/etc/nginx/nginx.conf -v /opt/data/nginx/htpasswd:/etc/nginx/htpasswd -p xx:xx -itd nginx
创建日志目录
在/var/logs/下创建相应的目录 如模块名字叫 xxxx 则新建目录/var/logs/xxxx
将应用docker镜像中服务日志挂载到 /var/logs/xxxx即可
当前服务器已存在filebeat
修改当前服务中的filebeat配置文件如下
- input_type: log
paths:
- /var/logs/xxxx/*.log
tags: ["push"]
重启filebeat
当前服务不存在filebeat
新起filebeat docker容器 配置如上所述