最近搞了一个logstash kafka elasticsearch kibana 整合部署的日志收集系统。部署参考lagstash + elasticsearch + kibana 3 + kafka 日志管理系统部署 02
上线过程中有一些环节,觉得还是值的大家注意的比如:
1,应用运维和研发人员要讨论一下日志格式的定义,
2,在logstash取日志和消费端logstash消费日志麻、过滤日志的时候怎么要高效,避免服务本身告成系统压力过大,如果每天要处理过亿日志量,性能不注意,哈哈,可以使劲想像,会有什么后果,
3,kafka和es集群的配置,监控等,及重启服务时应注意的事情,
4,目前 kle日志收集在实时展示比较有优势,那历史数据,也就是说在es中的索引需要清理旧的数据,索引需要优化提高kibana检索速度等。
在维护过程中也遇 到了一些问题,比如批量部署生产端logstash,配置文件,更新配置文件脚本,巡检服务是否正常等,综上,所以利用fabric弄一个简单的管理脚本,还是很好玩的。 源代码已上传这里,下面主要是对一些主要功能及源码做一说明,以便过几个月看到时候,还提醒一下自己。哈哈
项目目录如下;
├── bin
│ ├── __init__.py
│ ├── logstash_dev.py
│ ├── test.txt
│ └── update_config.sh
├── branches
├── conf
│ ├── config.conf
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── setting.py
│ └── setting.pyc
├── config
├── description
├── file
│ ├── config
│ │ ├── appapi
│ │ │ ├── logstash_shipper_production.conf
│ │ │ └── logstash_shipper_production.conf.bak
│ │ ├── consume
│ │ │ ├── consume_fiter.txt
│ │ │ ├── consume_input.sh
│ │ │ ├── consume_input.txt
│ │ │ ├── consume_output.txt
│ │ │ ├── get_typelist.sh
│ │ │ ├── get_typelist.txt
│ │ │ ├── logstash_indexer_consume.conf
│ │ │ └── logstash_indexer_consume.conf.template
│ │ ├── g1web
│ │ │ ├── logstash_shipper_production.conf
│ │ │ └── logstash_shipper_production.conf.template
│ │ ├── houtai
│ │ │ └── logstash_shipper_production.conf
│ │ └── wapapi
│ │ └── logstash_shipper_production.conf
│ └── logstash
│ ├── install_logstash.sh
│ └── logstashd
说明: bin目录放执行脚本 conf 目录放业务服务器信息(config.conf)、调用配置文件(setting.py) file 目录放需要推送到终端的配置文件或安装包
logstash_dev 应用逻辑如下:
1.logstash_dev说明
./update_config.sh test.txt
向config.conf 生成和更新env.roles需要业务组和主机信息
./
fab -f logstash_dev.py --shortlist #可以列出目前定义的执行任务有那些
如下:root@wqk-K43SD:/var/www/fabric_project/logstash_dev/bin# fab -f logstash_dev.py --shortlist
/var/www/fabric_project/logstash_dev
G1WEB
JDK_DEP
check_load
check_localhost
jdk_check
logstash_check
logstash_production
logstash_production_config_update
logstash_service
logstashd_update执行任务fab -f logstash_dev.py G1WEB
只要会点python 了解一点fabric原理 logstash_dev.py里的东东比较好定义的,因主要是调用的shell
2. setting.py这里面的东西,是我最容易忘记的
#!/usr/bin/env python
# coding:utf8
#author: shantuwqk@163.comfrom fabric.colors import * from fabric.api import * import re import sys,os import ConfigParser #sys.path.append('/var/www/python_program/fabric_project/ops_manager') nowdir = os.getcwd() BASEDIR = '/'.join(nowdir.split('/')[:-1]) CONFIGFILE = "%s/conf/config.conf"%BASEDIR PWDFILE = "%s/conf/.ippwd.txt"%BASEDIR print BASEDIR env.user = 'root' env.roledefs = {} env.passwords = {} #下面主要是实现加载配置文件已解析成字典给env.roledefs def Handle_Conf_Role(): CONF = ConfigParser.ConfigParser() CONF.read(CONFIGFILE) g = CONF.items('HostGroup') for gh in g: env.roledefs[gh[0]] = [] for h in gh[1].split(','): env.roledefs[gh[0]].append(h) return env.roledefs #下面主要实现解决主机密码文件,解析成env.passwords字典 def Handle_Host_Pass(): with open(PWDFILE,'r') as f: for line in f.readlines(): for g,hlist in Handle_Conf_Role().items(): for h in hlist: b = re.match(r'^%s .*' %h,line,re.M|re.I) if b: c = b.group() k = c.split()[0] v = c.split()[1] nc='%s@%s:22'%(env.user,k) env.passwords[nc] = v return env.passwords if __name__ == '__main__': print Handle_Conf_Role() print Handle_Host_Pass()