# 日志代理 **Repository Path**: N-Ghost/log_agent ## Basic Information - **Project Name**: 日志代理 - **Description**: GO语言写的日志代理模块,发送到NSQ消息队列中 - **Primary Language**: Go - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-22 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 日志代理 #### 介绍 GO语言写的日志代理模块,发送到NSQ消息队列中 #### 软件架构 用tail包监控日志文件,发送到NSQ消息队列中。 conf目录下是yml配置文件,配置NSQ地址缓冲区,etcd地址,要监控的文件名,日志等级之类的配置。 etcd目录下目录下主要是初始化etcd的连接,根据key获取值,这个值是json类型。 loger包定义日志输出格式,用的是`logrus`包。 nsq包:初始化nsq连接的同时初始化日志通道的缓冲量,然后不断的从这个通道获取日志数据,发送到NSQ中。 `SendToChan`函数是一个暴露给外部的函数,把日志先发送到通道中。 taillog包: - 构造一个`TailTask`结构体对象,调用初始化方法函数。 - 定义`tail`配置,`TailTask`结构体对象里的`tail实例`读取日志文件,后台起一个`goroutine`调用`run`函数。 - `run`方法函数就是把`TailTask`读取到的日志数据发送给`nsq`包里的一个通道缓存起来。 - `taillog_mgr`定义了一个etcd的配置结构体对象,遍历这个切片类型的配置对象,根据etcd里的配置来初始化`TailTask`结构体对象。 nsq包: - 初始化消息生产者,NSQ的服务器地址,`SendToChan`函数先把收集到的日志放到管道中,`sendToNSQ`从管道中异步的把日志发往nsq消息队列。 etcd包: - 初始化ETCD连接,获取json格式配置,解析到结构体对象中,`taillog_mgr`根据结构体对象的配置信息来运行`TailTask`。 - `WatchConf`监控etcd中的配置是否变化,如果变化了根据新配置来执行`TailTask`。 #### 安装教程 1. nsq消息队列,可以和`log_forwarding`共用一个集群 启动nsqlookupd,`nsqlookupd`是`nsqd`的管理者,启动后默认监听4160和4161端口 ```sh ./nsqlookupd -broadcast-address=本机IP地址 ``` 启动NSQD守护进程,`nsqd`接收、排队、并向客户端发送消息。默认监听4151和4150端口。 ```sh ./nsqd -broadcast-address=本机地址 -lookupd-tcp-address=“nsqlookup地址”:4160 ``` 启动nsqadmin,这是一个执行各种管理任务的web界面,需要指定lookup地址。默认监听4171端口。 ```sh ./nsqadmin -lookupd-http-address=“nsqlookup地址”:4161 ``` 2. etcd服务发现,可以和`log_forwarding`共用一个集群 目前还日志收集还不支持集群,单机部署: ```sh ./etcd --initial-advertise-peer-urls http://0.0.0.0:2380 --listen-peer-urls http://0.0.0.0:2380 \ --advertise-client-urls http://0.0.0.0:2379 --listen-client-urls http://0.0.0.0:2379 ``` 图形化管理etcd可以使用`etcdkeeper`这个工具,docker安装相对方便。 #### 使用说明 1. 解压后要对`log_agent`程序添加启动权限: ```sh chmod 744 log_agent ``` 2. `conf.yaml`配置文件不能换目录,不能改名,否则会找不到 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)