介绍
Monasca 是一种多租户监控服务工具,可以帮助IT分析日志数据,设置报警和通知。
OpenStack环境监测需求巨大,多样化,高度复杂。Monasca项目任务是提供高度可扩展、高性能、容错监控的多租户服务解决方案。
Monasca为高级监控提供了一个可扩展的平台,运营商和租户都可以使用该平台来获取其基础设施和应用程序的运行状态。
Monasca使用REST API进行高速日志处理和查询。它集成了流动报警发动机,通知发动机和聚合发动机。
您可以使用Monasca用例非常多样。Monasca遵循微服务架构,其中几个服务分布在多个存储库中。每个模块旨在为整个监控解决方案提供离散服务,并且可以根据运营商/客户的需求进行部署。
- 使用Rest API接口用于存储、查询性能和历史数据,不同于使用特殊协议和传输方法的其他监控工具,如nagios的NSCA,Monasca只利用了http
- 多租户认证、指标提交和认证使用Keystone组件。存储相关租户ID
- 指标使用(key,value)定义键值称为量度(dimensions)
- 实时阈值和报警系统指标
- 复合报警设置采用由子报警表达式和逻辑操作器组成的简单语法
- 监控代理支持内置系统和服务的检查结果,只支持内置系统和服务的检查结果nagios的checks和statsd
- 根据开源技术构建的开源监控方案
架构
下图概述了Monasca涉及组件的指标管道和交互。
核心组件
- monasca-agent:监控代理,python编写包含多个子组件,支持各种组件cpu使用率、可用内存、nagios插件、statsd、还有很多服务,比如mysql、rabbitMQ等监控
- monasca-api::用于监控RESTful API界面针对以下概念和区域:
- 指标:实时存储和查询大量指标
- 统计:查询指标的统计数据
- 报警定义:增删查改报警定义
- 告警:查询和删除告警历史
- 通知方式:创建和删除通知方式,并在报警状态发生变化时直接通知用户—monasca API可以通过python或JAVA来实现
- manasca-persister:消费者队列传输指标或报警(RPC传输中的概念consumer),将指标和报警存储在相应的数据库中
- monasca-transform:转换聚合物引擎,转换指标的名称和值,生成新的指标并传输到消息队列
- Anomaly and Prediction Engine:还处于原型阶段
- monasca-thresh:计算指标时,当超过阈值时,基于Apache storm项目(开源实时分布式计算系统)
- monasca-notification:接受来自消息队列的报警,并发送通知,如发送报警邮件,Notification Engine基于Python
- monasca-analytics:分析引擎,接受来自消息队列的报警,进行异常检测和报警关联
- 消息队列:以前支持RabbitMQ的,由于性能、规模、持续性和高可用的限制,转向了Kafka
- Metrics and Alarms Database:支持Vertica和infuxDB,对Cassandra支持正在进行中
- Config Database:目前使用信息数据库配置Mysql,对PostgreSQL支持正在进行中
- python-monascaclient:python实现的命令行客户端,对monasca API进行操控
- Monitoring UI:Horizon dashboard的可视化
- Ceilometer publisher:提供给Ceilometer的multi-publisher插件
除了直接向API除了发送请求外,还可以使用以下工具和Monasca进行交互:
- Monasca client:CLI和Python客户端
- Horizon plugin:插件将监控面板添加到监控面板上Horizon
- Grafana app:Grafana可以查看和配置报警定义、报警和通知
Libraries:
- monasca-common:Monasca组件中使用的通用代码
- monasca-statsd:StatsD从检测到的应用程序中发送指标的兼容库
Grafana集成:
- monasca-grafana-datasource:用于Grafana的多租户Monasca数据源
- grafana:Grafana 4.1.2添加了分支版本Keystone身份验证
第三方技术和工具
Monasca使用多种第三方技术:
- Apache Kafka(http://kafka.apache.org):基于分布式、分区、多副本、多订阅者zookeeper协调分布式日志系统(也可用作)MQ系统),常用web/nginx日志、访问日志、新闻服务等
- Apache Storm(http://storm.incubator.apache.org/):Apache Storm免费开源分布式实时计算系统。Storm,可以轻松可靠地处理无限数据流,从而可以进行实时处理,而Hadoop可批处理
- ZooKeeper(http://zookeeper.apache.org/):由Kafka和Storm使用
- Apache Spark:由Monasca Transform作为聚合引擎
- 配置数据库:
- MySQL:支持将MySQL配置数据库
- PostgreSQL:通过Hibernate和SQLAlchemy支持Config数据库的POSTgres
- Vagrant(http://www.vagrantup.com/):Vagrant它提供了一个易于配置和重复的便携式工作环境,基于行业标准技术,由一致的工作流程控制,可以帮助您最大限度地提高生产力和灵活性
- Dropwizard(https://dropwizard.github.io/dropwizard/):Dropwizard将Java稳定的生态系统,成熟的图书馆聚集在一个简单而轻的程序包中,这样你就可以专注于完成自己的任务。Dropwizard为复杂的配置、应用程序指标、日志记录、操作工具等提供支持,使您和您的团队能够在最短的时间内发布高质量的Web服务
- 时间序列数据库:
- InfluxDB(http://influxdb.com/):无外部依赖的开源分布式时间序列数据库。Metrics数据库支持InfluxDB
- Vertica(http://www.vertica.com):可扩展性高的商业企业级SQL分析数据库。它提供内置的自动高可用性功能,擅长数据库分析、压缩和存储大量数据。Vertica免费社区版,最大可存储1 TB没有时间限制的数据,网站是https://my.vertica.com/community/.虽然不再经常使用Vertrica,但Metrics数据库支持它
- Cassandra(https://cassandra.apache.org):Mestrics数据库支持Cassandra
安装
手工安装
monasca例如,所有组件都可以安装在节点上openstack多节点也可以部署在控制器节点上。本文将在我身上openstack集群集群创造VM中安装monasca-api,该VM相关浮动ip。Monasca-agent已安装在控制器节点上。代理节点通过浮动ip发布指标api节点。它们在同一子网中。
安装我们需要的软件包和工具
apt-getinstall-ygitapt-getinstallopenjdk-7-jre-headlesspython-pippython-dev安装mysql如果你在数据库openstack控制器节点中安装了monasca-api,你可以跳过安装,跳过安装msyql用于openstack服务。
apt-getinstall-ymysql-server创建monasca这里下载数据库架构mon.sql( https://raw.githubusercontent.com/stackforge/cookbook-monasca-schema/master/files/default/mysql/mon.sql)
mysql-uroot-ppassword<mon_mysql.sql安装Zookeeper安装Zookeeper并重新启动它。我使用本地主机接口,只有一个Zookeeper,因此,默认配置文件不需要配置。
apt-getinstall-yzookeeperzookeeperdzookeeper-binservicezookeeperrestart安装和配置kafka
wgethttp://apache.mirrors.tds.net/kafka/0.8.1.1/kafka_2.9.2-0.8.1.1.tgzmvkafka_2.9.2-0.8.1.1.tgz/optcd/opttarzxfkafka_2.9.2-0.8.1.1.tgzln-s/opt/kafka_2.9.2-0.8.1.1//opt/kafkaln-s/opt/kafka/config/etc/kafka创建kafka系统用户,kafka该服务将作为用户动。
useraddkafka-U-r在/etc/init/kafka.conf中创建kafka启动脚本,复制 到/etc/init/kafka.conf中并保存。
description"Kafka"startonrunlevel[2345]stoponrunlevel[!2345]respawnlimitnofile3276832768#Ifzookeeperisrunningonthisboxalsogiveittimetostartupproperlypre-startscriptif[-e/etc/init.d/zookeeper];then/etc/init.d/zookeeperrestartfiendscript#Ratherthanusingsetuid/setgidsudoisusedbecausethepre-starttaskmustrunasrootexecsudo-Hukafka-gkafkaKAFKA_HEAP_OPTS="-Xmx1G-Xms1G"JMX_PORT=9997/opt/kafka/bin/kafka-server-start.sh/etc/kafka/server.properties配置kafka,vim /etc/kafka/server.properties,确保配置以下内容:
host.name=localhostadvertised.host.name=localhostlog.dirs=/var/kafka创建 kafka log目录
mkdir/var/kafkamkdir/var/log/kafkachown-Rkafka./var/kafka/chown-Rkafka./var/log/kafka/启动kafka服务
servicekafkastart下一步是创建 kafka topics
/opt/kafka/bin/kafka-topics.sh/opt/kafka/bin/kafka-topics.sh/opt/kafka/bin/kafka-topics.sh/opt/kafka/bin/kafka-topics.sh/opt/kafka/bin/kafka-topics.sh/opt/kafka/bin/kafka-topics.sh/opt/kafka/bin/kafka-topics.sh/opt/kafka/bin/kafka-topics.sh/opt/kafka/bin/kafka-topics.sh/opt/kafka/bin/kafka-topics.sh安装配置influxdb
curl-sLhttps://repos.influxdata.com/influxdb.key|apt-keyadd-echo"debhttps://repos.influxdata.com/ubuntutrustystable">/etc/apt/sources.list.d/influxdb.listapt-getupdateapt-getinstall-yapt-transport-httpsapt-getinstall-yinfluxdbserviceinfluxdbstart创建 influxdb database,user,password,retention policy,同时修改密码。
influxCREATEDATABASEmonCREATEUSERmonascaWITHPASSWORD'tyun'CREATERETENTIONPOLICYpersister_allONmonDURATION90dREPLICATION1DEFAULTexit安装配置storm
wgethttp://apache.mirrors.tds.net/storm/apache-storm-0.9.6/apache-storm-0.9.6.tar.gzmkdir/opt/stormcpapache-storm-0.9.6.tar.gz/opt/storm/cd/opt/storm/tarxzfapache-storm-0.9.6.tar.gzln-s/opt/storm/apache-storm-0.9.6/opt/storm/currentuseraddstorm-U-rmkdir/var/stormmkdir/var/log/stormchown-Rstorm./var/storm/chown-Rstorm./var/log/storm/修改storm.yaml,vim current/storm/conf/storm.yaml
###basejava.library.path:"/usr/local/lib:/opt/local/lib:/usr/lib"storm.local.dir:"/var/storm"###zookeeper.*storm.zookeeper.servers:-"localhost"storm.zookeeper.port:2181storm.zookeeper.retry.interval:5000storm.zookeeper.retry.times:29storm.zookeeper.root:"/storm"storm.zookeeper.session.timeout:30000###supervisor.*configsarefornodesupervisorssupervisor.slots.ports:-6701-6702-6703-6704supervisor.childopts:"-Xmx1024m"###worker.*configsarefortaskworkersworker.childopts:"-Xmx1280m-XX: UseConcMarkSweepGC-Dcom.sun.management.jmxremote"###nimbus.*configsareforthemasterinimbus.host:"localhost"nimbus.thrift.port:6627mbus.childopts:"-Xmx1024m"###ui.*configsareforthemasterui.host:127.0.0.1ui.port:8078ui.childopts:"-Xmx768m"###drpc.*configs###transactional.*configstransactional.zookeeper.servers:-"localhost"transactional.zookeeper.port:2181transactional.zookeeper.root:"/storm-transactional"###topology.*configsareforspecificexecutingstormstopology.acker.executors:1topology.debug:falselogviewer.port:8077logviewer.childopts:"-Xmx128m"创建storm supervisor 启动脚本,vim /etc/init/storm-supervisor.conf
#StartupscriptforStormSupervisordescription"StormSupervisordaemon"startonrunlevel[2345]consolelogrespawnkilltimeout240respawnlimit255setgidstormsetuidstormchdir/opt/storm/currentexec/opt/storm/current/bin/stormsupervisor创建Storm nimbus 启动脚本。vim /etc/init/storm-nimbus.conf
#StartupscriptforStormNimbusdescription"StormNimbusdaemon"startonrunlevel[2345]consolelogrespawnkilltimeout240respawnlimit255setgidstormsetuidstormchdir/opt/storm/currentexec/opt/storm/current/bin/stormnimbus启动supervisor 与 nimbus
servicestorm-supervisorstartservicestorm-nimbusstart安装monasca api python软件包
一些monasca同时提供组件python和java我主要选择代码python部署代码。
pipinstallmonasca-commonpipinstallgunicornpipinstallgreenlet#Requiredforbothpipinstalleventlet#Foreventletworkerspipinstallgevent#Forgeventworkerspipinstallmonasca-apipipinstallinfluxdbvim /etc/monasca/api-config.ini,把主机修改成你的IP地址
[DEFAULT]name=monasca_api[pipeline:main]#Addvalidatorinthepipelinesothemetricsmessagescanbevalidated.pipeline=authkeystonecontextapi[app:api]paste.app_factory=monasca_api.api.server:launch[filter:auth]paste.filter_factory=keystonemiddleware.auth_token:filter_factory[filter:keystonecontext]paste.filter_factory=monasca_api.middleware.keystone_context_filter:filter_factory[server:main]use=egg:gunicorn#mainhost=192.168.2.23port=8082workers=1proc_name=monasca_apivim /etc/monasca/api-config.conf,修改以下内容
[DEFAULT]#logging,makesurethattheuserunderwhomtheserverrunshaspermission#towritetothedirectory.log_file=monasca-api.loglog_dir=/var/log/monasca/api/debug=Falseregion=RegionOne[security]#TherolesthatareallowedfullaccesstotheAPI.default_authorized_roles=admin,user,domainuser,domainadmin,monasca-user#TherolesthatareallowedtoonlyPOSTmetricstotheAPI.ThisrolewouldbeusedbytheMonascaAgent.agent_authorized_roles=admin#TherolesthatareallowedtoonlyGETmetricsfromtheAPI.read_only_authorized_roles=admin#TherolesthatareallowedtoaccesstheAPIonbehalfofanothertenant.#Forexample,aservicecanPOSTmetricstoanothertenantiftheyareamemberofthe"delegate"role.delegate_authorized_roles=admin[kafka]#Theendpointtothekafkaserveruri=localhost:9092[influxdb]#OnlyneededifInfluxdbdatabaseisusedforbackend.#TheIPaddressoftheInfluxDBservice.ip_address=localhost#TheportnumberthattheInfluxDBserviceislisteningon.port=8086#Theusernametoauthenticatewith.user=monasca#Thepasswordtoauthenticatewith.password=tyun#ThenameoftheInfluxDBdatabasetouse.database_name=mon[database]url="mysql pymysql://monasca:tyun@127.0.0.1/mon"[keystone_authtoken]identity_uri=http://192.168.1.11:35357auth_uri=http://192.168.1.11:5000admin_password=tyunadmin_user=monascaadmin_tenant_name=servicecafile=certfile=keyfile=insecure=false注释掉[mysql]其他部分保持默认。
创建monasca并进入目录
useraddmonasca-U-rmkdir/var/log/monascamkdir/var/log/monasca/apichown-Rmonasca./var/log/monasca/在openstack控制器节点上,创建monasca用户密码为租户服务monasca管理员角色的分配。
openstackusercreateopenstackroleaddopenstackservicecreatecreateendpointopenstackendpointcreateopenstackendpointcreateopenstackendpointcreate192.168.1.143是我的api浮动虚拟机地址IP,请将其更改为您的IP。
创建monasca api启动脚本,vim /etc/init/monasca-api.conf
#StartupscriptfortheMonascaAPIdescription"MonascaAPIPythonapp"startonrunlevel[2345]consolelogrespawnsetgidmonascasetuidmonascaexec/usr/local/bin/gunicorn-nmonasca-api-keventlet安装monasca-persister
创建monasca-persister启动脚本
vim /etc/init/monasca-persister.conf
#StartupscriptfortheMonascaPersisterdescription"MonascaPersisterPythonapp"startonrunlevel[2345]consolelogrespawnsetgidmonascasetuidmonascaexec/usr/bin/java-Dfile.encoding=UTF-8-cp/opt/monasca/monasca-persister.jarmonasca.persister.PersisterApplicationserver/etc/monasca/persister-config.yml启动monasca-persister
servicemonasca-persisterstart安装monasca-notificatoin
pipinstallapt-getinstallsendmail将notification.yaml复制到/etc/monasca/创建启动脚本,vim /etc/init/monasca-notification.conf
#Startupscriptforthemonasca_notificationdescription"MonascaNotificationdaemon"startonrunlevel[2345]consolelogrespawnsetgidmonascasetuidmonascaexec/usr/bin/python/usr/local/bin/monasca-notification启动通知服务
servicemonasca-notificationstart安装monasca-thresh复制monasca-thresh到/etc/init.d/复制monasca-thresh.jar到/opt/monasca-thresh/复制thresh-config.yml到/etc/monasca 并修改主机和数据库信息启动monasca-thresh
servicemonasca-threshstart安装monasca-agent
在openstack安装在控制器节点上monasca-agent,可以监控openstack服务进程。
sudopipinstall设置monasca-agent,将用户域ID和项目域ID改为默认值。
monasca-setup-umonasca-ptyun加载认证脚本admin-rc.sh,然后运行monasca metric-list。
DevStack安装
运行Monasca DevStack至少需要一个10GB RAM的主机。
在这里可以找到安装和运行Devstack的说明:
https://docs.openstack.org/devstack/latest/要在DevStack中运行Monasca,请执行以下三个步骤。
克隆DevStack代码库。
gitclonehttps://git.openstack.org/openstack-dev/devstack添加以下内容devstack根目录中的目录DevStack local.conf文件中local.conf不存在,可能需要创建。
#BEGINDEVSTACKLOCAL.CONFCONTENTS[[local|localrc]]DATABASE_PASSWORD=secretdatabaseRABBIT_PASSWORD=secretrabbitADMIN_PASSWORD=secretadminSERVICE_PASSWORD=secretserviceSERVICE_TOKEN=111222333444LOGFILE=$DEST/logs/stack.sh.logLOGDIR=$DEST/logsLOG_COLOR=False#ThefollowingtwovariablesallowswitchingbetweenJavaandPythonfortheimplementations#oftheMonascaAPIandtheMonascaPersister.Ifthesevariablesarenotset,thenthe#defaultistoinstallthePythonimplementationsofboththeMonascaAPIandtheMonascaPersister.#UncommentoneofthefollowingtwolinestochooseJavaorPythonfortheMonascaAPI.MONASCA_API_IMPLEMENTATION_LANG=${MONASCA_API_IMPLEMENTATION_LANG:-java}#MONASCA_API_IMPLEMENTATION_LANG=${MONASCA_API_IMPLEMENTATION_LANG:-python}#UncommentofthefollowingtwolinestochooseJavaorPythonfortheMonascaPesister.MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-java}#MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-python}#UncommentoneofthefollowingtwolinestochooseeitherInfluxDBorVertica.#default"influxdb"isselectedasmetricDBMONASCA_METRICS_DB=${MONASCA_METRICS_DB:-influxdb}#MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-vertica}#ThislinewillenableallofMonasca.enable_pluginmonasca-apihttps://git.openstack.org/openstack/monasca-api#ENDDEVSTACKLOCAL.CONFCONTENTS从devstack根目录运行目录“ ./stack.sh”。
若使用最少OpenStack组件运行Monasca,可以添加以下两行local.conf文件中。
disable_all_servicesenable_servicerabbitmysqlkey假如你还想安装Tempest请添加 进行测试tempest
enable_servicerabbitmysqlkeytempest要启用Horizon和Monasca UI,请添加 horizon
enable_servicerabbitmysqlkeyhorizontempest使用Vagrant
Vagrant可用于使用Vagrantfile部署运行有Devstack和Monasca的VM。安装Vagrant后,只需在../monasca-api/devstack目录中运行vagrant up命令。
要在devstack本地代码库用于安装,请将变更提交给本地存储库master分支,然后在配置文件中修改与要使用的本地存储库相对应的变量file://my/local/repo/location。要使用monasca-api repo本地实例,请更改enable_plugin monasca-api https://git.openstack.org/openstack/monasca-api为enable_plugin monasca-api file://my/repo/is/here。这两个设置只是重建的devstack VM时生效。
1.使用Vagrant将Vertica启用为Metrics DB
Monasca支持同时使用InfluxDB和Vertica存储指标和报警状态的历史记录。默认情况下,DevStack环境中启用InfluxDB。
Vertica是Hewlett Packard Enterprise商业数据库。免费下载Community Edition(CE)要启用安装程序Vertica,请执行以下操作:
- 注册并下载Vertica Debian安装程序https://my.vertica.com/download/vertica/community-edition把它放在你的主目录里。不幸的是,DevStack安装程序不能自动使用URL,所以必须单独下载URL,并将其放置在安装程序运行以找到其位置。假设这个位置是您的主目录。Vagrant当你的主目录通常是“ /vagrant_home”挂载在VM内。
- 修改local.conf中MONASCA_METRICS_DB变量,配置Vertica如下所示:
MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-vertica}
2.使用PostgreSQL或MySQL
Monasca支持使用PostgreSQL和MySQL,因此该devstack还支持插件postgresql或mysql。
要使用MySQL设置环境,请使用:
enable_servicemysql另外,对于PostgreSQL,请使用:
enable_servicepostgresql3.使用ORM支持
ORM支持可以通过MONASCA_DATABASE_USE_ORM控制变量。但是,如果使用它PostgreSQL(也称为数据库后端)将被迫提供ORM支持
enable_service postgresql
4.加强Apache镜像
若因某种原因APACHE_MIRROR不能使用的,可以通过以下方式强制执行:
APACHE_MIRROR=http://www-us.apache.org/dist/5.使用WSGI
Monasca-api可以使用uwsgi和gunicorn与Apache一起部署。默认情况下,monasca-api在uwsgi下行。如果你想使用它。Gunicorn,请确保其中devstack/local.conf包含:
MONASCA_API_USE_MOD_WSGI=False使用
Monasca Dashboard
安装完成Monasca Dashboard Plugin之后,就可以通过了web检查和管理相应的监控和报警控制台。
操作控制台“Monitoring”栏,单击“Launch Monitoring Dashboard“,这将在管理节点上打开专用操作OpenStack Horizon门户。
在这个面板上,你可以:
- 单击OpenStack查看服务报警的服务名称。
- 单击服务器名称查看相关设备报警。
监控信息存储在两个数据库中(Vertica/influxdb与mysql)。备份监控数据时,将同时备份两个数据库。
- 监控指标在Vertica中存储7天。
- 存储在配置设置MySQL中。
- 如果监控节点上的服务在高负载(如15个控制网络和200个计算节点)下停止,消息队列将在大约6小时内开始清除。
查看监控信息
从主菜单中选择操作控制台Monitoring Dashboard来打开监控UI 。
单击Launch Monitoring Dashboard。
打开管理设备OpenStack Horizon中的“Monitoring”仪表板。
在第一次安装过程中,使用您为操作控制台设置的用户名和密码登录。
检查报警。您可以在屏幕上过滤结果。
- 点击报警左侧导航查看报警的所有服务和设备。
- 每行右侧“操作”单击菜单“Graph metrics”查看报警细节,并显示报警的历史记录和定义。您还可以在报警图形顶部看到指标名称。
- 点击OpenStack查看服务报警的服务名称。
- 单击服务器名称查看相关设备的报警。
单击左侧导航中的”Alarm Definitions “查看和编辑已启用的报警类型。
注:请勿更改或删除任何默认报警定义。但是,您可以添加新的报警定义。
您可以更改报警名称、表达式等详细信息。
如果报警过多或不足,可能需要提高或降低报警阈值。
编写报警表达式信息。
可选:单击Dashboard。
OpenStack仪表板(Grafana)打开。从仪表板上可以看到OpenStack每个节点的服务运行状态和运行状态CPU以及数据库使用情况的图
- 单击图形标题(例如,CPU),然后单击“编辑”。
- 查看图中其他类型的信息,更改功能。
可选:单击Monasca Health。
将打开“ Monasca服务仪表板”。在这个仪表板上,你可以看到Monasca服务运行状态图表示。
总结
Monasca作为Openstack的monitoring-as-a-service目前,社区和网络上的信息仍然很少。本文通过作者的实践记录了Monasca相关安装配置及使用方法,
Monasca可以实现IAAS到PAAS高扩展、高性能监控系统的系统架构决定了它能够轻松控制大集群、高负荷监控。目前,我们已经逐渐放弃了ceilometer gnocchi aodh组合,全面转向Monasca。目前不仅监控云主机和云网络,还监控我们Openstack集群内部的Kubernetns集群、数据库集群、对象存储等PAAS软件。
参考文章:
https://docs.openstack.org/monasca-api/latest/
https://wiki.openstack.org/wiki/Monasca