自主日志收集器和观察者
alco的Python项目详细描述
有什么问题
在解析、收集和 分析日志-ELK Stack。它有 功能强大的Web界面、搜索集群和日志转换 工具。很酷,但是:
- 它是Java,具有众所周知的内存和CPU需求
- 它是弹性搜索,对磁盘空间有要求
- 是logstash突然停止处理 条件。
- 它是Kibana,拥有非常酷的丰富接口,在所有方面都很宽松 在日志读取和搜索任务中grep和less。
介绍ALCO
ALCO是一个简单的ELK模拟,其主要目的是提供一个在线的 替换grep和less。主要功能有:
- Django在分布式系统事故分析中的应用
- 带筛选和搜索的无模式全文索引
- rabbitmq消息传递中的可配置日志收集和旋转 服务器
- 不是万能的怪物
技术堆栈
让我们跟踪日志消息从某个分布式系统到ALCO Web的路径 接口。
- 基于python的项目用文本“hello”调用logger.debug()方法 世界'
- 启动时 Logcollect库 自动配置python日志(甚至 Django和 Celery发送日志 用elk和 ALCO项目。
- ALCO日志收集器将队列绑定到RabbitMQ交换和进程 一批消息。
- 它使用redis收集可过滤字段的唯一值,并 sphinxsearch将消息存储在实时索引中。
- 当消息插入到SphinxSearch时,它包含索引 message字段、时间戳信息和无模式json字段 命名为js,具有python日志发送的所有日志记录属性。
- 基于django的web界面为 正在联机搜索收集的日志。
要求
- python 2.7或3.3+
- Logcollect对于python 收集日志的项目
- RabbitMQ分布式日志服务器 收藏
- SphinxSearch服务器2.3或更高版本 日志存储
- Redis用于sphinxsearch docid管理和 字段值存储
- django-sphinxsearch 作为Django>=1.8的数据库后端(可从 pypi)
设置
您需要在分析的项目中配置logcollect(请参见 README)。 如果rabbitmq管理接口在 logstashexchange-“它工作”:-
安装ALCO和PYPI的要求
pip install alco
接下来,创建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'
在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}}
运行syncdb或更好的migrate管理命令创建 数据库表。
运行webserver并从django admin创建loggerindex。
为SphinxSearch创建目录:
/var/log/sphinx/ /var/run/sphinx/ /data/sphinx/
接下来,将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
运行日志收集器:
python manage.py start_collectors --no-daemon
如果它定期显示收集的消息的数量,则记录 收集设置正确。
配置系统服务以自动启动子系统:
- nginx或apache http服务器
- django uwsgi后端
- ALCO收集器(start_collectorsmanagement命令)
- SphinxSearch,Redis,Django的默认数据库
打开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在我公司的试生产环境中进行了测试 积极发展。没有理由说它不是 准备投入生产使用。