您的位置:首页 > 编程语言 > Java开发

Graylog2+rsyslog+log4j 全过程日志管理环境搭建

2017-05-12 16:49 309 查看
        笔者刚刚进入一家新公司,leader给我的第一个任务就是研究一下graylog2这个日志管理框架,目的要把我们java开发过程中的logger统一放到一起,便于排错。经过一周的研究,已经把整个环境搭建完成,现把整个过程记录如下:

     第一步:安装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 Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=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 packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=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

    

  同时感谢graylog QQ群里的各位大侠,感谢在网上分享心得的各位大神
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息