【详细】JAVA项目如何快速集成graylog日志系统

认识graylog

graylog是一个简单易用、功能较全面的日志管理工具,相比 ELK 组合, 优点:

  • 部署维护简单
  • 查询语法简单易懂(对比ES的语法…)
  • 内置简单的告警
  • 可以将搜索结果导出为 json
  • UI 比较友好
  1. graylog单机架构图


  2. graylog集群架构


环境准备

  • 操作系统
版本
centos 6.7
服务器ip地址 192.168.1.235
  • 软件版本
软件 版本
jdk 1.8 +
mongodb 3.6
elasticsearch 5.6.10
graylog 2.4
  • 关闭防火墙和SELinux
关闭防火墙:
service iptables stop
chkconfig iptables off
关闭SELinux:
vi /etc/selinux/config
把SELINUX 改成 disabled  
SELINUX=disabled  
重启后永久关闭

安装JDK

  1. 下载
    jdk1.8下载地址
  2. 解压
    解压jdk包,放到/usr/local/
cd /root/soft/
tar -zxvf jdk-8u181-linux-x64.tar.gz 
mv jdk1.8.0_181/ /usr/local/

配置环境变量

vim /etc/profile
在文件的最后面加上
export JAVA_HOME=/usr/local/jdk1.8.0_181
export JRE_HOME=/usr/local/jdk1.8.0_181/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
然后保存退出
source /etc/profile  //让环境变量生效
然后执行 java -version
[root@master jdk1.8.0_181]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
显示表示jdk配置正常

安装MongoDB

  1. 配置MongoDB的yum源

编辑文件

vim /etc/yum.repos.d/mongodb-org-3.6.repo 

添加以下内容

[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
  1. 安装
    清除安装源 yum clean all
    yum install -y mongodb-org

  2. 安装注意地方

  • 如果出现 “GPG key retrieval failed: [Errno 14] problem making ssl connection”
    解决方式:vim /etc/yum.repos.d/mongodb-org-3.6.repo 将gpgcheck=0
  1. 编辑配置文件
# 编辑默认配置文件
vim /etc/mongod.conf
# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0  # mongod绑定的ip地址,此处要修改


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:
  1. 相关操作
# 添加服务自启动
chkconfig --add mongod
# 启动
service mongod start 
# 停止
service mongod stop 
# 重启
service mongod restart 
  1. 验证mongod是否安装成功
[root@master ~]# netstat -ano| grep 27017
tcp        0      0 0.0.0.0:27017               0.0.0.0:*                   LISTEN      off (0.00/0/0)

安装Elasticsearch

  1. 导入验证文件
 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  1. 添加源文件
    vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
  1. 安装
yum install -y elasticsearch 
  1. 修改配置文件
    # vim /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog
network.host: 192.168.1.235
  1. 相关操作
# 添加服务自启动
chkconfig --add elasticsearch
# 启动
service elasticsearch start 
# 停止
service elasticsearch stop 
# 重启
service elasticsearch restart 
  1. 检查运行服务端口
[root@master ~]# ps -ef | grep elastics
497        1419      1  0 09:13 ?        00:00:47 /usr/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -Djdk.io.permissionsUseCanonicalPath=true -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/usr/share/elasticsearch -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid -d -Edefault.path.logs=/var/log/elasticsearch -Edefault.path.data=/var/lib/elasticsearch -Edefault.path.conf=/etc/elasticsearch
root       1977   1676  0 11:19 pts/1    00:00:00 grep elastics
[root@master ~]# netstat -tulnp | grep 1419
tcp        0      0 ::ffff:192.168.1.235:9200   :::*                        LISTEN      1419/java           
tcp        0      0 ::ffff:192.168.1.235:9300   :::*                        LISTEN      1419/java  
  1. 检查elasticsearch状态
[root@master ~]# curl -X GET http://192.168.1.235:9200
{
  "name" : "_zZYaCG",
  "cluster_name" : "graylog",
  "cluster_uuid" : "uwd67mRTQmaOuHbbypOohw",
  "version" : {
    "number" : "5.6.10",
    "build_hash" : "b727a60",
    "build_date" : "2018-06-06T15:48:34.860Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}
  1. 安装注意地方
  • 问题1:root用户启动的时候报错“Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME”
    解决方式: ln -s /usr/java/jdk1.8.0_65/bin/java(jdk路径) /usr/bin/java 做一个软连接

  • 问题2:[WARN ][o.e.b.JNANatives ] unable to install syscall filter:
    java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
    at org.elasticsearch.bootstrap.Seccomp.linuxImpl(Seccomp.java:349) ~[elasticsearch-5.0.0.jar:5.0.0]
    at org.elasticsearch.bootstrap.Seccomp.init(Seccomp.java:630) ~[elasticsearch-5.0.0.jar:5.0.0]
    解决方式:使用centos 7 linux版本,就不会出现此类问题了
    如果用centos6版本的,则在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
    bootstrap.memory_lock: false
    bootstrap.system_call_filter: false

  • 问题3:ERROR: bootstrap checks failed
    max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
    max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
    解决方式:切换到root用户,编辑limits.conf 添加类似如下内容
    vi /etc/security/limits.conf
    添加如下内容:

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
  • 问题4:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
    解决方式:切换到root用户,进入limits.d目录下修改配置文件。
    vi /etc/security/limits.d/90-nproc.conf
    修改如下内容:
* soft nproc 1024

修改为

* soft nproc 2048
  • 问题5: max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
    解决方式:修改切换到root用户修改配置limits.conf 添加下面两行
    命令:vi /etc/security/limits.conf
*        hard    nofile           65536
*        soft    nofile           65536
  • 问题6: Starting elasticsearch: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)
    解决方式
cd /etc/elasticsearch/

由于elasticsearch5.0默认分配jvm空间大小为2g,修改jvm空间分配

vim jvm.options 
-Xms2g
-Xmx2g

修改成

-Xms512m
-Xmx512m

安装graylog

  1. 安装源
 rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-2.4-repository_latest.rpm
  1. 安装
yum install -y graylog-server
  1. 生成password_secret
[root@master ~]# yum install -y pwgen 
[root@master ~]# pwgen -N 1 -s 96
77K2GVzQeM2pFV4fNgrt5e5jxhz8X3HuR5OlLwuPEAA8XJux0fkoff97GeaNlQQDWmXCiHplY6MMzwwqDXapcXeNC5qZDHs9
  1. 生成root_password_sha2
[root@master ~]# echo -n 123456 | sha256sum
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92  -
  1. 编辑配置文件
    vim /etc/graylog/server/server.conf
password_secret = 77K2GVzQeM2pFV4fNgrt5e5jxhz8X3HuR5OlLwuPEAA8XJux0fkoff97GeaNlQQDWmXCiHplY6MMzwwqDXapcXeNC5qZDHs9
root_password_sha2 = 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
rest_listen_uri = http://0.0.0.0:9000/api/
web_listen_uri = http://0.0.0.0:9000/
root_timezone = Asia/Shanghai
elasticsearch_hosts = http://192.168.1.235:9200
mongodb_uri = mongodb://localhost/graylog  (因为mongod和graylog装同一台机器,这个不需要改动)
  1. 相关操作
# 启动
service graylog-server start
# 停止
service graylog-server stop
# 重启
service graylog-server restart
  1. 配置日志收集
  • 浏览器输入:http://192.168.1.235:9000


  • 输入账号:admin 密码:123456


  • 点击菜单“System”--》“Inputs”


  • 新建新的Input



  1. 启动graylog遇到的坑
    当使用腾讯云那些云服务器的时候,发现bind公网ip后启动不了,不可用。如果绑定在0.0.0.0的ip上,可以启动,但是访问http://公网ip:9000的时候,出现一个错误提示:
Server currently unavailable

We are experiencing problems connecting to the Graylog server running on [http://192.168.1.1:9000/api/ 4](http://192.168.1.1:9000/api/). Please verify that the server is healthy and working correctly.

You will be automatically redirected to the previous page once we can connect to the server.

Do you need a hand? We can help you.
Less details

This is the last response we received from the server:

Error message
Bad request
Original Request
GET [http://192.168.1.1:9000/api/system/sessions 10](http://192.168.1.1:9000/api/system/sessions)
Status code
undefined
Full error message
Error: Request has been terminated Possible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.

这个时候,其它配置都不需要动,只需要
** vim /etc/graylog/server/server.conf**
将 web_endpoint_uri = http://公网ip:9000/api/ 上即可

graylog配置完毕,接着我们看下如何在java程序上通过logback进行日志的收集

将graylog集成在java项目上

  1. 用maven新建个java的项目




  2. 加入依赖

<!--logback日志-->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.1.7</version>
    </dependency>

    <!--logback gelf日志收集-->
    <dependency>
      <groupId>biz.paluch.logging</groupId>
      <artifactId>logstash-gelf</artifactId>
      <version>1.11.1</version>
    </dependency>
  1. 配置logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property resource="conf/logback.properties" />
    <property name="log.context.name" value="${log.context.name}"/>
    <property name="log.charset" value="UTF-8"/>
    <property name="log.pattern" value="[%date][%level][%thread][%class:%line] - %msg%n"/>
    <contextName>${log.context.name}</contextName>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="${log.charset}">
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <appender name="GELF" class="biz.paluch.logging.gelf.logback.GelfLogbackAppender">
        <host>udp:192.168.1.235</host><!--graylog 服务器ip-->
        <port>11002</port><!--graylog udp端口-->
        <version>1.1</version>
        <facility>我的测试</facility>
        <extractStackTrace>true</extractStackTrace>
        <filterStackTrace>true</filterStackTrace>
        <mdcProfiling>true</mdcProfiling>
        <timestampPattern>yyyy-MM-dd HH:mm:ss,SSSS</timestampPattern>
        <maximumMessageSize>8192</maximumMessageSize>

        <!-- This are fields using MDC -->
        <mdcFields>mdcField1,mdcField2</mdcFields>
        <dynamicMdcFields>mdc.*,(mdc|MDC)fields</dynamicMdcFields>
        <includeFullMdc>true</includeFullMdc>
    </appender>

    <root>
        <level value="INFO"/>
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="GELF"/>
    </root>
</configuration>
  1. 加入测试代码


  2. graylog上查看效果


特别是分布式应用的时候,这样查起日志来就很舒服了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容