转自:https://blog.csdn.net/money9sun/article/details/71742127
需要关注Graylog2与ELK方式的日志优劣势对比。
第一步:安装Graylog2环境(CentOS7)
这里网上有很多的教程,直接看官网也是不错的,笔者绕了很大的圈子,最后是参照官网(http://docs.graylog.org/en/2.2/pages/installation/os/centos.html)和这篇博客(http://www.cnblogs.com/iamqiu/p/5749783.html)将环境搭建起来,简要概述如下:
1、安装CentOS7.2 这个啥也不说了,保证能联网
2、安装JDK
#yum -y install java-1.8.0-openjdk-headless.x86_64
安装两个工具
sudo yum install epel-release
sudo yum install pwgen
3、安装Mongodb
3.1 编辑文件 #vi /etc/yum.repos.d/mongodb-org-3.2.repo
3.2 加入如下文字:
[mongodb-org-3.2]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
3.3 #sudo yum install mongodb-org
3.4 注册并启动服务
$ sudo chkconfig --add mongod$ sudo systemctl daemon-reload$ sudo systemctl enable mongod.service$ sudo systemctl start mongod.service
4、 安装 Elasticsearch
4.1 rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
4.2 编辑文件 /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]name=Elasticsearch repository for 2.x packagesbaseurl=https://packages.elastic.co/elasticsearch/2.x/centosgpgcheck=1gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearchenabled=1
4.3 sudo yum install elasticsearch
4.4 修改配置文件 /etc/elasticsearch/elasticsearch.yml
把 cluster.name 前面的# 去掉 然后 改成 cluster.name:graylog(这个名字可以自定义,但是要记住)
4.5 注册并启动服务
$ sudo chkconfig --add elasticsearch$ sudo systemctl daemon-reload$ sudo systemctl enable elasticsearch.service$ sudo systemctl restart elasticsearch.service
4.6 测试
# curl -X GET http://localhost:9200
显示
{
"name" : "Justin Hammer",
"cluster_name" : "graylog",
"cluster_uuid" : "37q5FJC7Q7e6OZKEbEObMQ",
"version" : {
"number" : "2.4.5",
"build_hash" : "c849dd13904f53e63e88efc33b2ceeda0b6a1276",
"build_timestamp" : "2017-04-24T16:18:17Z",
"build_snapshot" : false,
"lucene_version" : "5.5.4"
},
"tagline" : "You Know, for Search"
}
表示正确
5、安装Graylog2
5.1安装
$ sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-2.2-repository _latest.rpm$ sudo yum install graylog-server
5.2 配置
生成密钥 : pwgen -N 1 -s 96 将生成的串保存下来
生成密码: echo-nyourpassword|sha256sum
# vi /etc/graylog/server/server.conf
password_secret = 刚才生成的密钥字符串
root_password_sha2 = 刚才生成的密码字符串
root_timezone = Asia/Shanghai
web_listen_uri = http://0.0.0.0:9000/
rest_listen_uri = http://0.0.0.0:12900/
rest_transport_uri = http://192.168.128.131:12900/ (IP就是服务器的IP)
elasticsearch_cluster_name = graylog(和前面定义的cluster.name一致)
elasticsearch_shards = 1
elasticsearch_replicas = 0
5.3 加入服务并启动
$ sudo chkconfig --add graylog-server$ sudo systemctl daemon-reload$ sudo systemctl enable graylog-server.service$ sudo systemctl start graylog-server.service
6 关闭防火墙
#systemctl stop firewalld.service
#systemctl disable firewalld.service
#setenforce 0
#vim /etc/sysconfig/selinux
SELINUX=disable
至此 Graylog2安装完成。浏览器输入 http://IP:9000/ 就可以看到界面了
第二部: 安装rsyslog
CentOS7 自带rsyslog 不需要安装,只需要配置,配置文件 /etc/rsyslog.conf
#################
#### MODULES ####
#################
$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog # provides kernel logging support
$ModLoad immark # provides --MARK-- message capability
# provides UDP syslog reception
$ModLoad imudp # 打开UDP端口
$UDPServerRun 514 # 端口号
# provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
# Enable non-kernel facility klog messages
$KLogPermitNonKernelFacility on
###########################
#### GLOBAL DIRECTIVES ####
###########################
#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Filter duplicated messages
$RepeatedMsgReduction on
#
# Set the default permissions for all log files.
#
$FileOwner want # 你自己的用户名
$FileGroup adm # 你自己的用户组
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser want # 你自己的用户名
$PrivDropToGroup adm # 你自己的用户组
#
# Where to place spool and state files
#
$WorkDirectory /var/lib/rsyslog
$IncludeConfig /etc/rsyslog.d/*.conf
*.* @127.0.0.1:5140;RSYSLOG_SyslogProtocol23Format
# 转发到graylog2服务器的5140端口,因为是单机环境,所以就配了127.0.0.1
# 端口号也就是一会儿要配置的graylog2 的一个端口,由于权限问题,尽量采用1024以后的端口
第三步,在graylog2中添加一个input
端口号设置为刚才设置的5140 然后点击 show received messages
这是看到的应该是一些系统日志,如下:
第四部 : 将我们开发中的log放进graylog中
有三种方式将log放进去,其实是有3种方式把log放到rsyslog里面
这里我只说比较通用的log4j的方式
我就直接贴代码和配置文件了
配置文件:
log4j.rootLogger=Debug,CONSOLE,syslog
log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
log4j.appender.syslog.SyslogHost=192.168.128.131 --graylog服务器的IP
log4j.appender.syslog.Facility=local1
log4j.appender.syslog.header=true
log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
log4j.appender.syslog.layout.ConversionPattern=%5p | %c{1}-%M [%d{yyyy-MM-dd HH:mm:ss}] - %m%n
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c %x - %m%n
代码:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class loggerTest {
private static final Logger logger = LoggerFactory.getLogger(loggerTest.class);
public static void main(String[] args) {
logger.info("这是一个info");
logger.error("这是一个error");
logger.debug("这是一个debug");
logger.warn("这是一个warn");
System.out.println(123);
}
}
然后运行代码,到刚才的input的里面去看
搞定。
后记:
1、笔者没有试过,直接把log4j和graylog2连起来可不可以,但是中间加一个rsyslog可以利用其过滤能力,将不同的log放到不同的input里面或者不放进graylog2,所以这种方式应该是比较合理的。
2、一开始笔者用的是官网的镜像,但是有很多问题,最后还是自己搭的环境,希望大家还是自己的搭个环境。
参考:
http://www.cnblogs.com/iamqiu/p/5749783.html
https://my.oschina.net/0757/blog/198329
3、log4j配置文件是不能配置端口的,默认514