首页
首页
文章目录
  1. nginx安装与部署
  2. 安装java 1.8
  3. 安装与配置RabbitMQ
  4. elasticsearch安装与配置
  5. Kibana 安装与配置
  6. Logstash 安装与配置
    1. Logstash 安装
    2. 收集端Logstash配置(对应图中的Logstash Provider)
    3. 发送端Logstash配置(对应图中的Logstash Consumer)
  7. kibana 效果图
  8. 后记

给ELK加上RabbitMQ,用来收集nginx日志

今天主要写一篇ELK+RabbitMQ收集nginx日志的文档

环境:

系统 软件 版本 作用
Centos 7.0 kibana 5.4.2 展示
Centos 7.0 elasticsearch 5.4.2 数据库存储与搜索
Centos 7.0 logstash 5.4.2 日志收集与转发
Centos 7.0 RabbitMQ 3.3.5 消息队列
Centos 7.0 nginx 1.12.0 用于输出日志

架构图:

ELK_RabbitMQ_nginx架构图

nginx安装与部署

我这里使用yum安装,方便快捷,

1、添加nginx的yum源

1
2
3
cd /etc/yum.repos.d/

vim nginx.repo

填写如下内容:

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

保存退出

2、安装nginx

yum install nginx -y

3、配置nginx输出json访问日志

为了方便收集与展示,我们直接在nginx配置文件将日志输出修改成json

1
2
cd /etc/nginx/
cp nginx.conf nginx.conf.bak

vim nginx.conf

1
2
3
4
5
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 /var/log/nginx/access.log main;

改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
log_format json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",' '"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
'"status":"$status"}';
access_log /var/log/nginx/access.log json;

这里只是方便演示,就是直接一个默认nginx页面即可

4、启动nginx

systemctl start nginx

访问并查看日志,日志输出结果为下图

nginx输出json访问日志

安装java 1.8

jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html

根据自己的需求下载相应版本

这是我用的版本 jdk-8u60-linux-x64.tar.gz (很久之前下载好的^_^!)

解压

tar zxf jdk-8u60-linux-x64.tar.gz

创建java目录

mkdir /usr/java

移动java到指定目录

mv jdk1.8.0_60 /usr/java/

添加系统变量

vim /etc/profile

添加:

1
2
3
JAVA_HOME="/usr/java/jdk1.8.0_60"
CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
PATH=".:$JAVA_HOME/bin:$PATH"

应用:

1
source /etc/profile

检查:

1
2
3
4
5
#java -version
输出结果
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

安装与配置RabbitMQ

1.安装RabbitMQ之前需要先安装erlang

1
2
3
4
5
yum install epel-release

yum install erlang

yum install rabbitmq-server

2.启用RabbitMQ的web管理功能

/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management

检查是否启用

/usr/lib/rabbitmq/bin/rabbitmq-plugins list

rabbitmq启用web管理

3.创建相关账户

1
2
3
4
5
rabbitmqctl add_user Dzer0 123456  # 给web管理创建个账户
rabbitmqctl add_vhost elk # 创建个虚拟账户用创建通道
rabbitmqctl set_permissions -p elk Dzer0 ".*" ".*" ".*" # 权限
rabbitmqctl set_user_tags Dzer0 administrator # 权限
rabbitmqctl list_permissions -p elk # 权限

4.创建配置文件

vim /etc/admin_rabbitmq.conf

内容

1
2
3
4
5
[default]
hostname = 127.0.0.1
port = 15672
username = Dzer0
password = 123456

5.创建一个exchange

rabbitmqadmin -c /etc/admin_rabbitmq.conf declare exchange –vhost=elk name=elk_exchange type=direct

6.创建一个queue

rabbitmqadmin -c /etc/admin_rabbitmq.conf declare queue –vhost=elk name=elk_queue durable=true

7.创建一个binding,绑定之前创建的exchange和queue并设置一个routing_key

rabbitmqadmin -c /etc/admin_rabbitmq.conf –vhost=elk declare binding source=”elk_exchange” destination=”elk_queue” routing_key=”elk_key”

第四至第七步可以直接在web管理界面执行,不需要非得命令行创建

到此RabbmitMQ配置完成。

elasticsearch安装与配置

1.基础环境配置:

vim /etc/security/limits.conf

添加

test - nofile 65536 # test表示elasticsearch运行账户

注:如果使用rpm安装的话用户为elasticsearch 可以通过cat /etc/passwd查看elasticsearch账户

2.下载与配置

ELK所有下载地址:https://www.elastic.co/cn/products

我这里下载的是elasticsearch-5.4.2.tar.gz

这里有个知识点:elasticsearch只能运行在普通用户下

创建普通用户:

useradd test # 该账户与上方基础环境配置的test为同一账户。

配置:

由于这边只是掩饰,所以没有做ES集群

1
2
3
4
5
6
vim elasticsearch.yml

path.data: /data/datas
path.log: /data/logs
network.host: 主机ip
http.port: 9200

启动:

su - test

./bin/elasticsearch -d # -d表示后台运行

Kibana 安装与配置

由于官网最新版下载只有rpm的。

ELK所有下载地址:https://www.elastic.co/cn/products

这里下载的是kibana-5.4.2-x86_64.rpm

安装:

1
rpm -ivh kibana-5.4.2-x86_64.rpm

配置:

1
2
3
4
5
vim /etc/kibana/kibana.yml

server.port: 5601
server.host: "本地ip"
elasticsearch.url: "http://上方ES服务ip地址:9200"

启动 systemctl start kibana

Logstash 安装与配置

Logstash 安装

ELK所有下载地址:https://www.elastic.co/cn/products

这边下载的是logstash-5.4.2.tar.gz

ELK 其实都是解压即用的,前提是安装好java环境

收集端Logstash配置(对应图中的Logstash Provider)

作用:

收集nginx日志并发送到RabbitMQ

vim nginx_access_log.conf

添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
input {
file {
path => "/var/log/nginx/access.log" # 这个地址是不是很眼熟,就是上面nginx配置日志输出地址
codec => "json"
type => "nginx"
}
}

output {
rabbitmq {
host => "RabbitMQ地址"
port => "5672" # 端口
vhost => "elk" # 虚拟账户
exchange => "elk_exchange" # RabbitMQ创建的exchange 名字
exchange_type => "direct" # 类型
key => "elk_key" # key
user => "Dzer0" # 账户
password => "123456" # 密码
}
stdout { codec => rubydebug } # 输出到终端,正式使用时删掉改行
}

启动:

./bin/logstash -f nginx_access_log.conf

发送端Logstash配置(对应图中的Logstash Consumer)

作用:

从RabbitMQ读取日志并写入到ES中

vim RabbitMQ.conf

添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
input {
rabbitmq {
host => "127.0.0.1"
subscription_retry_interval_seconds => "5"
vhost => "elk"
exchange => "elk_exchange"
queue => "elk_queue"
durable => "true"
key => "elk_key"
user => "Dzer0"
password => "123456"
}
}
output {
if [type] == "nginx" {
elasticsearch {
hosts => "ES地址:9200" # ES地址
index => "nginx-%{+YYYY.MM.dd}" # 索引规则
}
}
else {
file {
path => "/var/log/logstash/unknown_messages.log"
}
}
stdout { codec => rubydebug } # 同上
}

启动:

./bin/logstash -f RabbitMQ.conf

OK到此 部署完成。

浏览器刷新nginx后查看效果

ELK_RabbitMQ_nginx展示效果1

kibana 效果图

ELK_RabbitMQ_nginx展示效果2

后记

文章到此就写完了,从测试到写完文章耗时6小时,希望看文章的你,能从中得到帮助。

End

支持一下
扫一扫,我会更有动力更新
  • 微信扫一扫
  • 支付宝扫一扫