项目作者: yepeng2002

项目描述 :
distributed log
高级语言: JavaScript
项目地址: git://github.com/yepeng2002/Snake.git
创建时间: 2017-09-08T08:22:07Z
项目社区:https://github.com/yepeng2002/Snake

开源协议:Apache License 2.0

下载


Abstract

如何分析web api被调用的频率?
如何分析web api接口方法耗时?
如何分析分布式应用日志?

Snake是基于C#开发的日志中心,实现了应用程序日志采集平台和实时api监控平台,包括api压力监控和调用监控。
是基于RESTFul api风格开发的.net web api服务应用集群,实时的接口调用监控为系统开发者提供了有利的分析数据。
Snake是为此而生的安静而平顺监控系统,它通过Filter实现监控嵌入,异步发送监控日志消息,通过基于RabbitMQ
实现的消息总线平顺处理消息,最终将监控日志数据输入存储到Mongodb中。

Snake日志平台目前推出了V1.0,该版本实现了日志的采集,存储和分析,采集端可支持web api服务通过过滤器自动采集和应用主动发送应用日志请求,
存储端实现了日志存储和应用日志应用名和标签解析,分析端实现应用日志条件查询和日志消息合并,后续还需完善api监控日志的分析和服务接口调用路径树结构解析。

Requirements

Snake架构

架构

Quick Started

  1. Snake.Api项目是webapi项目,负责发送日志请求的响应和查询日志接口,作为生产者将日志发布到消息队列,作为查询接口从Mongodb提取日志数据,编译并发布Snake.Api到IIS站点,修改配置文件web.config,如下:
    • RabbitMQ配置
      1. <!--************************* RabbitMQ Connection Settings ****************** -->
      2. <RabbitMQ.Connection>
      3. <add key="RabbitMQ.HostName" value="localhost" ></add>
      4. <add key="RabbitMQ.Port" value="5672" ></add>
      5. <add key="RabbitMQ.UserName" value="snake" ></add>
      6. <add key="RabbitMQ.Password" value="snake" ></add>
      7. <add key="RabbitMQ.VirtualHost" value="snakeTest" ></add>
      8. <add key="RabbitMQ.QueueName" value="q_snake_apitrack" ></add>
      9. <!--重试次数-->
      10. <add key="RabbitMQ.UseRetryNum" value="3" ></add>
      11. </RabbitMQ.Connection>
    • Mongo配置
      1. <add key="MongoConnectionString" value="mongodb://snake:snake@localhost:27017/SnakeDbTest/?MaximumPoolSize=500;socketTimeoutMS=2000;MinimumPoolSize=1;waitQueueTimeoutMS=300;waitQueueMultiple=10;ConnectionLifetime=30000;ConnectTimeout=30000;Pooled=true" ></add>
    • Redis配置
      1. <!--Redis配置参数,格式:password@IP:port-->
      2. <RedisConfig WriteServerList="123456@127.0.0.1:6379" ReadServerList="123456@127.0.0.1:6379" MaxWritePoolSize="60" MaxReadPoolSize="60" AutoStart="true" DefaultDb="3" LocalCacheTime="180" RecordeLog="false">
      3. </RedisConfig>
  2. Snake.ApiTrackService项目是windows服务,是消息的消费者,并将消费的消息存入MongoDB,同时解析应用和标签存入缓存服务Redis供Snake.Api提取Applications和tags给Snake.App客户端选择,编译Snake.ApiTrackService项目
    • 修改配置文件App.config配置项,如下:
      1. <appSettings>
      2. <add key="MongoConnectionString" value="mongodb://snake:snake@localhost:27017/SnakeDbTest/?MaximumPoolSize=500;socketTimeoutMS=2000;MinimumPoolSize=1;waitQueueTimeoutMS=300;waitQueueMultiple=10;ConnectionLifetime=30000;ConnectTimeout=30000;Pooled=true" ></add>
      3. </appSettings>
      4. <!--************************** snake.Service Settings ********************** -->
      5. <snake.service>
      6. <add key="snake.serviceName" value="SnakeConsumer" ></add>
      7. <add key="snake.serviceDisplayName" value="Snake Consumer Server" ></add>
      8. <add key="snake.serviceDescription" value="Snake Consumer Server" ></add>
      9. </snake.service>
      10. <!--************************* RabbitMQ Connection Settings ****************** -->
      11. <RabbitMQ.Connection>
      12. <add key="RabbitMQ.HostName" value="localhost" ></add>
      13. <add key="RabbitMQ.Port" value="5672" ></add>
      14. <add key="RabbitMQ.UserName" value="snake" ></add>
      15. <add key="RabbitMQ.Password" value="snake" ></add>
      16. <add key="RabbitMQ.VirtualHost" value="snakeTest" ></add>
      17. <add key="RabbitMQ.QueueName" value="q_snake_apitrack" ></add>
      18. <!--`消费者个数-->
      19. <add key="RabbitMQ.ConsumerNum" value="4" ></add>
      20. <!--重试次数-->
      21. <add key="RabbitMQ.UseRetryNum" value="3" ></add>
      22. </RabbitMQ.Connection>
    • 执行start.bat批处理脚本,安装或更新windows服务
  3. 安装RabbitMQ,根据上述1和2的配置设置用户密码和VirtualHost
  4. 安装Mongodb,根据上述2的配置设置用户密码和数据库,执行script目录下的MongoScript.js脚本
  5. 在需要监控的webapi项目(项目Snake.DemoApi中有使用示例代码)中引用Snake.Client.dll和Snake.Core.dll动态库,并增加配置:
    • 在App_Start下WebApiConfig.cs文件中增加一行代码如下:
      1. public static void Register(HttpConfiguration config)
      2. {
      3. // Web API 配置和服务
      4. string filterEnabled = ConfigurationManager.AppSettings["TrackLogFilterEnabled"];
      5. if (!string.IsNullOrEmpty(filterEnabled) && filterEnabled.ToLower() == "true")
      6. config.Filters.Add(new TrackLogActionFilterAttribute()); //api执行事件跟踪日志
    • 在web.config配置文件中增加配置如下:
      1. <appSettings>
      2. <!--TrackLog过滤器开关-->
      3. <add key="TrackLogFilterEnabled" value="true" ></add>
      4. <!--SnakeApi服务 验签-->
      5. <add key="SnakeApi" value="SNAKE_API" ></add>
      6. <add key="SnakeApiSecret" value="1!2@3#4$5" ></add>
      7. <!--Snake.Api服务 接口地址-->
      8. <add key="SnakeServerApi" value="http://localhost:50424" ></add>
      9. </appSettings>
  6. 安装Redis
  7. Snake.App项目是日志分析应用的客户端程序,支持分页加载日志数据,支持日志合并
    • App.config配置文件中增加配置如下:
      1. <appSettings>
      2. <!--SnakeApi服务 验签-->
      3. <add key="SnakeApi" value="SNAKE_API" ></add>
      4. <add key="SnakeApiSecret" value="1!2@3#4$5" ></add>
      5. <!--Snake.Api服务 接口地址-->
      6. <add key="SnakeServerApi" value="http://localhost:50424" ></add>
      7. </appSettings>
  8. 应用日志发送,引用Snake.Client.dll和Snake.Core.dll动态库,并增加配置,如下:
    • 示例项目Snake.DemoConsole配置文件中增加配置如下:
      1. <appSettings>
      2. <!--SnakeApi服务 验签-->
      3. <add key="SnakeApi" value="SNAKE_API" ></add>
      4. <add key="SnakeApiSecret" value="1!2@3#4$5" ></add>
      5. <!--Snake.Api服务 接口地址-->
      6. <add key="SnakeServerApi" value="http://localhost:50424" ></add>
      7. </appSettings>
    • 应用日志示例代码:
      1. LogProxy.Error("Exception : ", "Snake.DemoConsole", 4, new List<string>() { "Block", "Red" });
      2. LogProxy.Debug("Debug : ", "Snake.DemoConsole", tags: new List<string>() { "Blue", "Red" });

      Snake.App界面

应用日志分析

Apache 许可证2.0版

AREAS FOR IMPROVEMENTS

QQ: 46313060
Email: yepeng2002@sina.com