自主日志收集器和观察者

alco的Python项目详细描述


PyPI version

有什么问题

在解析、收集和 分析日志-ELK Stack。它有 功能强大的Web界面、搜索集群和日志转换 工具。很酷,但是:

  • 它是Java,具有众所周知的内存和CPU需求
  • 它是弹性搜索,对磁盘空间有要求
  • 是logstash突然停止处理 条件。
  • 它是Kibana,拥有非常酷的丰富接口,在所有方面都很宽松 在日志读取和搜索任务中grepless

介绍ALCO

ALCO是一个简单的ELK模拟,其主要目的是提供一个在线的 替换grepless。主要功能有:

  • Django在分布式系统事故分析中的应用
  • 带筛选和搜索的无模式全文索引
  • rabbitmq消息传递中的可配置日志收集和旋转 服务器
  • 不是万能的怪物

技术堆栈

让我们跟踪日志消息从某个分布式系统到ALCO Web的路径 接口。

  1. 基于python的项目用文本“hello”调用logger.debug()方法 世界'
  2. 启动时 Logcollect库 自动配置python日志(甚至 DjangoCelery发送日志 用elk和 ALCO项目。
  3. ALCO日志收集器将队列绑定到RabbitMQ交换和进程 一批消息。
  4. 它使用redis收集可过滤字段的唯一值,并 sphinxsearch将消息存储在实时索引中。
  5. 当消息插入到SphinxSearch时,它包含索引 message字段、时间戳信息和无模式json字段 命名为js,具有python日志发送的所有日志记录属性。
  6. 基于django的web界面为 正在联机搜索收集的日志。

要求

  • python 2.7或3.3+
  • Logcollect对于python 收集日志的项目
  • RabbitMQ分布式日志服务器 收藏
  • SphinxSearch服务器2.3或更高版本 日志存储
  • Redis用于sphinxsearch docid管理和 字段值存储
  • django-sphinxsearch 作为Django>=1.8的数据库后端(可从 pypi)

设置

  1. 您需要在分析的项目中配置logcollect(请参见 README)。 如果rabbitmq管理接口在 logstashexchange-“它工作”:-

  2. 安装ALCO和PYPI的要求

    pip install alco
    
  3. 接下来,创建django项目,添加sphinxsearch数据库 连接并配置settings.py以启用ALCO应用程序

    # For SphinxRouterSPHINX_DATABASE_NAME='sphinx'DATABASES[SPHINX_DATABASE_NAME]={'ENGINE':'sphinxsearch.backend.sphinx','HOST':'127.0.0.1','PORT':9306,}}# Auto routing log models to SphinxSearch databaseDATABASE_ROUTERS=('sphinxsearch.routers.SphinxRouter',)INSTALLED_APPS+=['rest_framework',# for API to work'alco.collector','alco.grep']ROOT_URLCONF='alco.urls'
  4. settings.py

    中配置ALCO资源
    ALCO_SETTINGS={# log messaging server'RABBITMQ':{'host':'127.0.0.1','userid':'guest','password':'guest','virtual_host':'/'},# redis server'REDIS':{'host':'127.0.0.1','db':0},# url for fetching sphinx.conf dynamically'SPHINX_CONF_URL':'http://127.0.0.1:8000/collector/sphinx.conf',# name of django.db.connection for SphinxSearch'SPHINX_DATABASE_NAME':'sphinx',# number of results in log view API'LOG_PAGE_SIZE':100}# override defaults for sphinx.conf templateALCO_SPHINX_CONF={# local index definition defaults override'index':{'min_word_len':8},# searchd section defaults override'searchd':{'dist_threads':8}}
  5. 运行syncdb或更好的migrate管理命令创建 数据库表。

  6. 运行webserver并从django admin创建loggerindex。

  7. 为SphinxSearch创建目录:

    /var/log/sphinx/
    /var/run/sphinx/
    /data/sphinx/
    
  8. 接下来,将sphinxsearch配置为使用生成的配置:

    searchd -c sphinx_conf.py
    

    sphinx_conf.py是一个简单的脚本,用于导入 alco.sphinx_conf获取生成的^{tt17}的模块$ 从alco http api和为sphinxsearch索引创建的目录:

    #!/data/alco/virtualenv/bin/python# coding: utf-8importosos.environ.setdefault('DJANGO_SETTINGS_MODULE','settings')fromalcoimportsphinx_conf
  9. 运行日志收集器:

    python manage.py start_collectors --no-daemon
    

    如果它定期显示收集的消息的数量,则记录 收集设置正确。

  10. 配置系统服务以自动启动子系统:

    • nginx或apache http服务器
    • django uwsgi后端
    • ALCO收集器(start_collectorsmanagement命令)
    • SphinxSearch,Redis,Django的默认数据库
  11. 打开http://127.0.0.1:8000/grep/<logger_name>/阅读并 在线搜索日志。

虚拟人

我们成功地将sphinxsearch配置为使用来自 virtualenv,添加一些环境变量以启动脚本(即 freebsd rc.d脚本):

sphinxsearch_prestart (){# nobody user has no HOME
exportPYTHON_EGG_CACHE=/tmp/.python-eggs
    # python path for virtualenv interpreter should be redeclared
exportPYTHONPATH=${venv_path}/lib/python3.4/:${venv_path}/lib/python3.4/site-packages/
    . "${virtualenv_path}/bin/activate"|| err 1"Virtualenv is not found"echo"Virtualenv ${virtualenv_path} activated: `which python`"}

在这种情况下,shebang对于sphinx_conf.pymust point virtualenv's python解释器。

生产使用量

目前,ALCO Stack在我公司的试生产环境中进行了测试 积极发展。没有理由说它不是 准备投入生产使用。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法启动应用程序:JNLP错误   java根据用户输入在PreparedStatement中使用setTime()或setNull()   java EJB与同步   java以object为键通过hashmap进行搜索   java中的模10^9+7   针对包含其他对象的对象的java OOP最佳实践   如何将字符串作为HTML代码从Java文件读取到JSP页面?   java我的POM怎么了?“解析表达式..检测到递归表达式循环”   用于Hbase的Mapreduce的java NoSuchMethodError   JAVAlang.SecurityException:权限拒绝:启动意图{act=安卓.Intent.action.MAIN cat=[安卓.Intent.category.LAUNCHER]   数组初始化谜语Java   通过arraylist搜索时的java句柄关联