一个简单的日志采集方案 原

一、原理

原理很简单,首先程序端使用log4j,然后配上redis的appender,将日志暂存到redis,然后logstash从redis中拉取数据,再存储到elasticsearche,最后用kibana展示。大致流程图如下:

二、搭建

这里的搭建是为了演示采集方案,未考虑HA、安全等。

2.1 搭建elasticsearch

    1、访问官方网站下载程序包,https://www.elastic.co/cn/downloads/elasticsearch

    2、新建一个用户es(elasticsearch要求不能用root用户)

    3、编辑/etc/security/limits.conf文件

es hard nofile 65536
es soft nofile 65536

    目的是防止启动报错

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

    4、编辑/etc/sysctl.conf

vm.max_map_count=655360

    然后执行

sysctl -p

    目的是防止启动报错

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

    5、编辑配置文件elasticsearch.yml,主要修改如下属性

#指定es运行绑定ip
network.host=192.168.1.2
#指定es集群名称
cluster.name=myes

    6、执行如下命令启动

./elasticsearch -d

    7、访问http://192.168.1.2:9200,查看是否启动成功

2.2 搭建kibana

    1、访问官方网站下载程序包,https://www.elastic.co/cn/downloads/kibana

    2、修改配置文件kibana.yml ,主要修改如下字段

#kibana运行的ip
server.host=192.168.1.2
#es的地址
elasticsearch.url="http://192.168.1.2:9200"

    3、然后启动kibana

./kibana &

    4、访问http://192.168.1.2:5601查看是否启动成功

2.3 搭建logstash

    1、访问官方网站下载程序包,https://www.elastic.co/cn/downloads/logstash

    2、新建一个文件,名称为log.conf,内容如下

input{
        redis{
                host=>'192.168.1.97'
                port=>'6379'
                key=>"filmapi"
                data_type=>"list"
                type=>'redis-input'
        }
}

output{
        elasticsearch{
                hosts=>'192.168.1.2:9200'
                protocol=>"http"
                index=>"filmapi"
        }
}

    3、启动logstash

./logstash -f ../config/log.conf 

2.4 程序集成log4j

    1、添加依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>com.ryantenney.log4j</groupId>
			<artifactId>redis-appender</artifactId>
			<version>1.0.1</version>
		</dependency>
		<dependency>
			<groupId>net.logstash.log4j</groupId>
			<artifactId>jsonevent-layout</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
		</dependency>

    2、修改配置文件

### set log levels ###
log4j.rootLogger = info,console,redis
#********************************************
#控制台的配置 
log4j.appender.console=org.apache.log4j.ConsoleAppender  
log4j.appender.console.Target=System.out  
log4j.appender.console.layout=org.apache.log4j.PatternLayout  
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n
#********************************************
#redis的配置
log4j.appender.redis=com.ryantenney.log4j.RedisAppender
log4j.appender.redis.layout=net.logstash.log4j.JSONEventLayout
log4j.appender.redis.host=192.168.1.3
log4j.appender.redis.port=6379
#log4j.appender.redis.password=password
log4j.appender.redis.key=filmapi
log4j.appender.redis.period=500
log4j.appender.redis.batchSize=100
log4j.appender.redis.purgeOnFailure=true
log4j.appender.redis.alwaysBatch=true
log4j.appender.redis.daemonThread=true

    3、启动程序

三、效果

    1、redis中的数据效果

    2、kibana中的数据效果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏十月梦想

jquery获取a标签中href值为空的连接,并提示信息

在未上线的项目中,尤其前端开发过程中,挺频繁使用超链接,但是超链接点击之后会跳转当前的首页!(很烦心).

9783
来自专栏程序员同行者

Django2.1发布,Django2.1新特性

Django 2.1 现已正式发布,官方表示随着 2.1 的发布,对 2.0 系列的主流支持服务将结束,进入安全修复服务周期,直至2019年4月。

6432
来自专栏小筱月

vue 路由 及 跳转传递参数的总结

5071
来自专栏DeveWork

代码实现WordPress点击进入随机一篇文章的方法

在开始之前,你可以点击本站右侧“类Metro风格侧边栏”的中间那个图像,如果你够仔细的话,你会发现你的浏览器的地址栏里的url首先是 http://devewo...

34610
来自专栏互联网杂技

js刷新页面

如何实现刷新当前页面呢?借助js你将无所不能。 1,reload 方法,该方法强迫浏览器刷新当前页面。 语法:location.reload([bForceGe...

9175
来自专栏python3

Django + Uwsgi + Nginx 的生产环境部署

使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态...

2K4
来自专栏子勰随笔

SVN 常用命令

31612
来自专栏图像识别与深度学习

2018-03-24python3.6.2 Tensorflow环境配置(win10 64位)

1737
来自专栏余生开发

前端开发规范

使用不带BOM的UTF-8编码 在HTML中指定编码<meta charset="utf-8">; 无需使用@charset指定样式表编码,它默认为UTF-...

1511
来自专栏码农笔录

cordova打包vue2(webpack)android、ios app

3862

扫码关注云+社区

领取腾讯云代金券