马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
monasca的所有组件都可以安装在一个节点上,例如openstack控制器节点上,也可以将其部署在多节点上。本文中,将在我的openstack集群中创建的新VM中安装monasca-api,该VM具有关联的浮动ip。Monasca-agent已安装在控制器节点上。代理节点通过浮动ip将指标发布到api节点。它们在同一子网中。 - 安装我们需要的软件包和工具
& R. a( m& m7 N1 [4 B1 @apt-get install -y git
7 b6 ^& {* C. d% Z5 C' _/ Bapt-get install openjdk-7-jre-headless python-pip python-dev - 安装mysql数据库 如果您在openstack控制器节点中安装了monasca-api,则可以跳过安装,将已安装的msyql用于openstack服务。& W4 _7 @* o } C
apt-get install -y mysql-server
/ Y4 e) W/ P. }5 A' I' N- C" _3 j创建monasca数据库架构,在此处下载mon.sql( https://raw.githubusercontent.com/stackforge/cookbook-monasca-schema/master/files/default/mysql/mon.sql)
, C% K+ h+ P1 h: k1 Z- K9 }. j$ Q1 Smysql -uroot -ppassword < mon_mysql.sql - 安装Zookeeper 安装Zookeeper并重新启动它。我使用本地主机接口,并且只有一个Zookeeper,因此默认配置文件不需要配置。$ N+ t, m( i3 O/ t+ V
apt-get install -y zookeeper zookeeperd zookeeper-bin service zookeeper restart( n0 u# h( S9 a+ _
- 安装和配置kafka( w7 i9 |5 H6 M3 |+ `( O
wget http://apache.mirrors.tds.net/kafka/0.8.1.1/kafka_2.9.2-0.8.1.1.tgz, H8 Y9 p1 C& q! [4 F
mv kafka_2.9.2-0.8.1.1.tgz /opt# w/ n0 S7 X9 O8 r9 u( @
cd /opt
+ ^" i$ V* k3 _' A) u( \+ Utar zxf kafka_2.9.2-0.8.1.1.tgz
" M* |- j( e: S" o" j- \- Yln -s /opt/kafka_2.9.2-0.8.1.1/ /opt/kafka. q/ f% {0 u7 n
ln -s /opt/kafka/config /etc/kafka- P0 D' ?8 f3 l' A
创建kafka系统用户,kafka服务将以该用户身份启动。
! j" i9 P4 K T6 ]% W' Guseradd kafka -U -r
; O' q' k5 x5 ~在/etc/init/kafka.conf中创建kafka启动脚本,将以下内容复制 到/etc/init/kafka.conf中并保存。
; i7 V& m. E0 Z0 N* Ldescription "Kafka"
. J% {2 _7 ]$ t+ l
; ]4 i& r! k% Q( W8 `) S$ {2 astart on runlevel [2345]" c" ]! H0 x6 H2 v) g4 D
stop on runlevel [!2345]
. g6 I* J8 @3 Z( F+ c# Z* @" k
3 e# p: u' }' d, S) ~7 A' irespawn/ i* ^, g: i; _/ E( ?) x% j
7 E b( p( E. Tlimit nofile 32768 327685 {! {! U# i1 [. ?& q4 o' z
9 T1 r y, I; i' w( y0 S# If zookeeper is running on this box also give it time to start up properly! E, h& K$ C% N( F9 k& H3 ^
pre-start script7 o- }5 E( u" T
if [ -e /etc/init.d/zookeeper ]; then) M3 D! a3 l, y
/etc/init.d/zookeeper restart1 j; R8 |; t- G' U
fi
/ f3 j0 f4 ~# s: O) j" @: Tend script
+ ]5 r. g" h E# b* z ~% e4 B7 [/ w1 n" O1 t/ \
# Rather than using setuid/setgid sudo is used because the pre-start task must run as root
* f/ D7 D4 q% y# k8 dexec sudo -Hu kafka -g kafka KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" JMX_PORT=9997 /opt/kafka/bin/kafka-server-start.sh /etc/kafka/server.properties- V& |. C4 c. x; q) N
配置kafka,vim /etc/kafka/server.properties,确保配置了以下内容:
% e3 _! x4 T9 b) \( W* \) Thost.name=localhost1 ^3 G4 x/ H" D
advertised.host.name=localhost
/ O o, ~1 b* } V: ~% R& Wlog.dirs=/var/kafka
. ~# T1 F1 M, i4 X创建 kafka log目录
3 u1 G4 R3 z- }% Hmkdir /var/kafka7 k1 L! b4 F+ b, N
mkdir /var/log/kafka( X. B5 f5 f" a8 |) ]
chown -R kafka. /var/kafka/( j4 U/ H' j! e2 E) I+ F
chown -R kafka. /var/log/kafka/# T9 c: T+ W C2 E A) q; E5 M+ W
启动kafka服务2 O7 l+ ?& N" q* s5 v! `: f
service kafka start/ }+ @% W+ s3 I" j" S& `$ e
下一步就是创建 kafka topics$ G/ e a6 ?8 M; N7 H6 p( G
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 64 --topic metrics7 G- x0 j* @8 Q. L9 p
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic events& h' x: L5 N1 N- P0 {& N
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic raw-events
8 A3 c: f4 P" L$ k T D/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic transformed-events
" B$ u2 y5 I' A; h/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic stream-definitions
4 m$ U2 R/ c8 h2 P7 O/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic transform-definitions
/ m% {+ t( j+ d/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic alarm-state-transitions
! A. {1 ?% ~' { N" ^: \1 ^/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic alarm-notifications9 s" E: u5 ^% P7 c+ r v) g7 E# ]
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic stream-notifications
# ~) L/ T! `8 A; I8 y# q& o/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic retry-notifications - 安装和配置 influxdb+ k( l+ b3 L: a6 l
curl -sL https://repos.influxdata.com/influxdb.key | apt-key add -
+ a5 i+ z, Y% d, techo "deb https://repos.influxdata.com/ubuntu trusty stable" > /etc/apt/sources.list.d/influxdb.list
; h* K. r9 G; g& }, O7 Fapt-get update
% m- l% w7 E# i9 y2 x! L+ }apt-get install -y apt-transport-https
0 T0 G6 n5 [* z; f) l- X0 Uapt-get install -y influxdb
( D) F' U3 l7 K/ S/ x4 k2 h
% u" ^( M7 B2 X8 mservice influxdb start
5 {. F8 H! @' y7 P创建 influxdb database, user, password, retention policy, 同时修改密码。% {3 W) t" a- p. A
influx
# V9 W ^$ [+ k8 [CREATE DATABASE mon
% F% P5 ]4 T. U9 K- O# jCREATE USER monasca WITH PASSWORD 'tyun' m# T6 g0 t5 S% a6 e% ^
CREATE RETENTION POLICY persister_all ON mon DURATION 90d REPLICATION 1 DEFAULT
+ h1 v1 ]7 O, R/ {2 l" ?6 hexit - 安装与配置 storm
; m/ Z; g7 K9 dwget http://apache.mirrors.tds.net/storm/apache-storm-0.9.6/apache-storm-0.9.6.tar.gz3 I5 C! [7 t) Z H) M
mkdir /opt/storm
4 F: B) G/ h* Z7 n# fcp apache-storm-0.9.6.tar.gz /opt/storm/
+ A3 a, C' |1 B Lcd /opt/storm/3 j8 U2 O% O( V1 b# p9 u) v
tar xzf apache-storm-0.9.6.tar.gz Y3 k( o) |! L' Y( Q q
ln -s /opt/storm/apache-storm-0.9.6 /opt/storm/current' w1 D$ z; t( @* H) |$ a
~. V+ | x( H9 Museradd storm -U -r
$ V$ Z7 M b! ]mkdir /var/storm
; d3 z: m/ _" B6 R' Y) S3 Imkdir /var/log/storm8 T/ R4 D. X. R) o) T* G, }
chown -R storm. /var/storm/
8 p( w' j- }5 \8 b* |+ M kchown -R storm. /var/log/storm/7 d- m [+ ]: |5 v0 {/ g
修改storm.yaml, vim current/storm/conf/storm.yaml
3 ]6 T/ b" S4 f" t1 N### base' Z( i1 l h E/ g y1 n- A
java.library.path: "/usr/local/lib:/opt/local/lib:/usr/lib"
' B+ L& Q8 U4 [. x! Z4 Ostorm.local.dir: "/var/storm"
+ o+ I! u$ g1 W# h' G
! c1 J0 j9 T$ C2 _& H; k8 A### zookeeper.*: P: r$ P1 K& x- K5 ~0 S# a2 z
storm.zookeeper.servers:; k: Z: [# c# o* ^1 X
- "localhost"
2 G+ I+ b6 @) Tstorm.zookeeper.port: 2181
% X5 k& M2 S9 X4 Q/ O$ e: R/ ostorm.zookeeper.retry.interval: 5000
0 d. |; l) v# r& Ostorm.zookeeper.retry.times: 292 L; s" |+ W' e; {
storm.zookeeper.root: "/storm"& F V7 x& y! a2 u. a
storm.zookeeper.session.timeout: 30000; ?9 B/ O1 j9 u. d
6 n- q; g- j: R0 V" X1 X/ O9 t### supervisor.* configs are for node supervisors
$ H: `' U( t& M: H* s: esupervisor.slots.ports:& @0 `5 I" m( S1 }0 U0 g( B/ U
- 67017 Z! g3 D+ d* Q3 }# D
- 67029 f# l% @! E9 q
- 6703# j4 J# f8 v& m7 ]2 C
- 6704
3 Z7 ?& Y! B. J8 S+ y% `' |. W/ X3 vsupervisor.childopts: "-Xmx1024m"
3 W* t* L1 M7 e+ S+ {
3 b1 D" Y. e$ A! e9 n. K0 Q+ j### worker.* configs are for task workers
) d# b8 y# U5 E& Q" Mworker.childopts: "-Xmx1280m -XX:+UseConcMarkSweepGC -Dcom.sun.management.jmxremote"
! q# H* R; H" s0 `! U3 ~% D9 p& m5 m x
### nimbus.* configs are for the masteri
& ~: P" A; Y: tnimbus.host: "localhost", D+ x8 x( C& Z3 o3 |
nimbus.thrift.port: 6627
: ]! K2 W3 w( @ Nmbus.childopts: "-Xmx1024m"
# [+ {8 y- A, y' b' [; E& S1 o& B1 I& a3 W9 o' u: O8 G
### ui.* configs are for the master) @) Z' q4 O% x% f y
ui.host: 127.0.0.1
/ K8 i% M2 E& d) l$ ~( P# }* j: M* gui.port: 8078( h* l# Q' @2 D/ t. [: I2 [0 ~
ui.childopts: "-Xmx768m"* j$ e0 x! z% p( P% d% z, z
& y" m7 L9 F$ `; k4 G5 D### drpc.* configs" i& n! d6 y6 U2 @0 r
* a2 Q5 e. E/ q' C1 e( V! N7 E### transactional.* configs
! u4 U; s/ _+ c9 X2 C+ J( v5 Ntransactional.zookeeper.servers:% E3 G1 w7 `% E: @
- "localhost"3 ]8 u5 C% K- x! y4 g! p7 p: P
transactional.zookeeper.port: 2181
- W8 J" T4 e2 k& `) [1 L9 V- Ftransactional.zookeeper.root: "/storm-transactional"
. r$ S5 m% I2 V- A- D3 i3 l
* m/ J9 \3 b; l) b# m### topology.* configs are for specific executing storms$ `+ z/ M9 Y6 y. Z0 l
topology.acker.executors: 1
; B& b" d1 Y4 W; G; R& n8 Qtopology.debug: false
! E! p4 k" E5 _- V! D! N$ s5 Q# A1 L. k! T) M/ e3 y/ L
logviewer.port: 8077
0 h$ w7 J1 _$ J0 Zlogviewer.childopts: "-Xmx128m". F0 b5 A7 J, w' E5 d h
创建storm supervisor 启动脚本,vim /etc/init/storm-supervisor.conf. }" ~8 E( U! f) h2 j9 c
# Startup script for Storm Supervisor( v4 g; O$ K. ~+ H2 N
4 G2 `" r: z) u/ ]0 h; B. }& rdescription "Storm Supervisor daemon"+ D0 m: L: ~! E+ q, H7 g
start on runlevel [2345]
P/ f! L1 N% @4 B3 s; s/ l" J3 B
console log
' t1 ]5 ~6 a: P$ Lrespawn
/ ]& \* |3 |2 Y5 A# D. p. Y( D. [5 F" a5 G5 _4 v1 H
kill timeout 240
$ A" a9 B2 a" |- k$ _! lrespawn limit 25 5
/ b, \4 ^" Z' m
. X& O. ~" q% N" p Nsetgid storm% D; p- l. R2 K# [1 H7 R
setuid storm
: r& _/ J$ R8 w2 Hchdir /opt/storm/current* M4 P( g4 A* N
exec /opt/storm/current/bin/storm supervisor- r0 E0 R3 F0 K; f' m* |: Q
创建Storm nimbus 启动脚本。vim /etc/init/storm-nimbus.conf
5 r' }3 ^9 r$ \9 g4 X0 }# Startup script for Storm Nimbus- m$ O* D4 e7 a, Z3 Y7 O2 G
5 [* ~" r% I1 D' y6 z, c" wdescription "Storm Nimbus daemon"/ }1 ~6 p' {$ r0 @; i' Q# b
start on runlevel [2345]8 b1 n6 w' C1 J2 G! P
; ?1 K+ a& J8 v2 V2 X' I2 h0 hconsole log5 ^# [3 X$ h# @, @9 m& k& [
respawn! p- g! g+ E& O3 w2 ?+ I7 W H
# b3 P" F: Q- W9 pkill timeout 240& u- A! X/ I9 a0 q: v3 g. H
respawn limit 25 56 k+ V, r0 ?* i. a2 H1 F" ^
" s: o! i' P8 c5 e: Q
setgid storm8 A% F1 ?8 f% e) J0 J" J! i. r w% k
setuid storm
7 o$ y' f: @7 P$ a3 y/ n! hchdir /opt/storm/current
# z; g! q1 ]/ e+ {exec /opt/storm/current/bin/storm nimbus+ ]) [5 Y) s/ \1 Z! U
启动supervisor 与 nimbus
4 \0 W; e4 ]9 vservice storm-supervisor start& Y, h- [0 l/ W
service storm-nimbus start - 安装monasca api python软件包 `9 w- q* d/ w
一些monasca组件同时提供python和java代码,主要是我选择python代码进行部署。 k' y, r0 k, Z. D$ e8 O+ Z
pip install monasca-common5 t2 \- o) E( }9 o' W/ [
pip install gunicorn% T2 @$ f$ g# r9 _
pip install greenlet # Required for both5 Z+ ?& g5 [! j& H# E/ a: F
pip install eventlet # For eventlet workers7 F. H V! S# Q7 x
pip install gevent # For gevent workers
3 N$ S( K6 C7 ^3 j9 S) w3 T& k; [6 ]+ _pip install monasca-api
- V: K2 l8 R- h/ G Z- m# Xpip install influxdb
9 z( S+ f8 w4 gvim /etc/monasca/api-config.ini,将主机修改为您的IP地址" ]1 M" {5 J q% \
[DEFAULT]
* p6 y! M. v0 M5 [name = monasca_api: n: e' R$ y0 |! z* L
7 X$ P" E5 {2 L2 B2 r
[pipeline:main]3 }& }6 F4 h/ W e! M6 X' F5 A. G
# Add validator in the pipeline so the metrics messages can be validated.
% Y/ ^9 @" e+ d; V# {' upipeline = auth keystonecontext api
! W$ m& F u7 @9 a% M
' ~( |3 q& ^! ?+ ~2 A[app:api]% h% `/ A! w9 `3 M' @
paste.app_factory = monasca_api.api.server:launch+ j' E9 m0 x# c+ q
( `- g( r/ K6 J# G% i[filter:auth]
7 _1 C# F1 ] G( r% Kpaste.filter_factory = keystonemiddleware.auth_token:filter_factory
6 `! m1 O) U" v4 k: W; \: h* g$ Q/ u
- f- f) m+ x! f1 N) Q[filter:keystonecontext]6 d1 v) ~7 S3 M9 o- g* e4 f% R
paste.filter_factory = monasca_api.middleware.keystone_context_filter:filter_factory
8 l. |7 g" I9 V8 e1 R. M# ?( \6 b- ~/ z2 N6 _, X3 C/ n" B, X$ J
[server:main]8 J( `( r( b+ _! n- i8 y* X
use = egg:gunicorn#main( Y; I- ^* W9 I/ v
host = 192.168.2.23& n9 q, C4 w: T, w) ~- q' N
port = 8082" q1 A1 ?1 k3 Q8 \- f! x+ L
workers = 1
' H, J3 a9 x: I. gproc_name = monasca_api
- s' @; D7 J J/ a8 _vim /etc/monasca/api-config.conf,修改以下内容$ F( ~) q) E$ M$ ^# \. L
[DEFAULT] R1 R7 n. |7 T v% ^! A
# logging, make sure that the user under whom the server runs has permission; ?7 y2 d/ W% F# l$ e: y# j. |
# to write to the directory.5 x/ G( \& V7 J
log_file = monasca-api.log
7 i4 d- {9 V- Y4 X) {0 Ilog_dir = /var/log/monasca/api/
; R6 Q2 x3 s Jdebug=False
; h& D2 e8 h. a* h2 f3 nregion = RegionOne
0 x2 L b) X. o9 k; x; H[security]
: a" w9 T4 W" t# The roles that are allowed full access to the API.; d& u% }! E$ Y5 n7 _
default_authorized_roles = admin, user, domainuser, domainadmin, monasca-user+ ]6 K7 }5 q# z% i$ ]. H6 @
k; K) X/ _) M% k3 u& t# The roles that are allowed to only POST metrics to the API. This role would be used by the Monasca Agent.. s+ r( A* e& @! J
agent_authorized_roles = admin0 m2 I5 a/ n9 z( i9 i3 S
" _: q6 F L" C x! Z& ]
# The roles that are allowed to only GET metrics from the API.0 Q: g6 x1 |9 a5 }
read_only_authorized_roles = admin& l/ j6 y9 ?; J5 H
- A1 [ b4 d, ?: y# x3 m" _
# The roles that are allowed to access the API on behalf of another tenant.- b* @! \$ S' `
# For example, a service can POST metrics to another tenant if they are a member of the "delegate" role.
+ s8 {4 l3 ^8 I2 xdelegate_authorized_roles = admin
: u7 l# a6 x# c: _7 W
% A, }, d; O; H5 b9 Q. R/ r) ~+ k[kafka]
& Z( Z6 N _) a# The endpoint to the kafka server. L& O5 N$ i6 ~( S7 v# f
uri = localhost:9092
& ]; I0 v; b5 G1 c5 \2 n6 m( m; b! J. m4 Z% f
[influxdb]
, t. u. `0 E, f# Only needed if Influxdb database is used for backend.
9 t! c& p, \* k* z; K' r5 K @' i# The IP address of the InfluxDB service.
2 s9 \8 G* r4 K2 }, K- rip_address = localhost& ~1 `1 j& u* N# f5 v9 @
8 j: D1 A& O# W- K3 u# The port number that the InfluxDB service is listening on.
% A8 s: L9 H" ~8 j: hport = 8086
0 c: X# k( S1 |( i U! p% P4 E' x7 |' p4 E s/ K. ]) [$ F, |( V" A4 Z# `
# The username to authenticate with.
; m6 A* N( T: V4 {, iuser = monasca6 P5 L( d( a% z; Q! ]9 Y
5 l: m4 G6 R5 I- f0 H: U* ~
# The password to authenticate with.+ I" z& Q* R/ U
password = tyun* L# m* k6 s* M+ }
% [! ^0 d* a! h! k( o- V
# The name of the InfluxDB database to use.
6 p- v' Q# R/ a3 H% |database_name = mon7 Y; A: I m S/ M6 J
, t' n' [+ [; h6 \* v[database]+ s: R5 K$ {( z# J0 L% i6 p& W
url = "mysql+pymysql://monasca:tyun@127.0.0.1/mon"
* H8 X. O& Z8 M
4 I4 t) X, q6 y" w# U, q9 f! J9 J6 D7 t
[keystone_authtoken], F) j5 N) U6 {# \! K. B
identity_uri = http://192.168.1.11:353570 w: }6 _- Y6 |4 u$ g5 x
auth_uri = http://192.168.1.11:5000
& B$ m/ |2 R# Z! @+ H! @5 s _& Wadmin_password = tyun
4 L* ~3 f* p- j! H1 Aadmin_user = monasca/ r, o! ^- E3 X1 Y2 R4 O
admin_tenant_name = service
( L6 X7 |: _( W7 S" D. [9 Hcafile =
9 Q' Y0 x) s& N* a9 h6 S8 Acertfile =) e8 i3 l& n+ Z
keyfile =) w+ l' s4 z2 }, w: Z2 f4 v% I6 ~8 G
insecure = false j# y3 F/ J8 c
注释掉[mysql]部分,其他部分保持默认。/ X# Q+ c5 i0 `# m6 Q
创建monasca系统用户并进入目录7 x U" W4 N' N; m& U
useradd monasca -U -r9 x* `0 O# f: S" e( Z) @
mkdir /var/log/monasca- Y6 D; e; ]7 l4 _1 d4 F
mkdir /var/log/monasca/api* }2 @0 u9 N" C" m
chown -R monasca. /var/log/monasca/2 L" Q" y J+ v) L
在openstack控制器节点上,创建monasca用户密码,为租户服务中的用户monasca分配管理员角色。2 X1 x$ J1 U1 F8 k/ u
openstack user create --domain default --password tyun monasca( P; v* l& M& I, W& S: Y& H
openstack role add --project service --user monasca admin" K+ }0 x2 H, Q8 [' c1 g
7 _% q: c, p* y; q" Y- K
openstack service create --name monasca --description "Monasca monitoring service" monitoring
* Q) V. N7 T f9 e' O8 e* K5 e
( h/ f( G% t' N3 \9 O |create endpoint8 |) F& D, f( `2 M( N
openstack endpoint create --region RegionOne monasca public http://192.168.1.143:8082/v2.0
0 A4 a6 {6 ^3 h0 Hopenstack endpoint create --region RegionOne monasca internal http://192.168.1.143:8082/v2.0
. z; @5 I. S2 G$ J1 Hopenstack endpoint create --region RegionOne monasca admin http://192.168.1.143:8082/v2.0
/ k% `# n3 P0 ?9 N; T( C8 E; ^2 W: r3 ?192.168.1.143是我的api虚拟机地址的浮动IP,请将其更改为您的IP。
& E8 v9 X5 r) C/ w9 H/ [- H, D; e创建monasca api启动脚本,vim /etc/init/monasca-api.conf
4 B" S H$ V) @# p1 A$ Y" H, R# Startup script for the Monasca API
2 i- v3 s. j8 o" e3 }- ^7 f
5 g" y4 i. H! U, [1 ydescription "Monasca API Python app"$ Q, k; Y7 C& W' `: w/ d2 w+ k
start on runlevel [2345] Z; A' R# d: d
x, e* l9 p3 Z6 d7 D% K/ A
console log9 }2 x2 k% `5 G9 X7 K, j$ l" e2 y
respawn. b( c0 C2 [; J
: ~& y& ]* y, b4 }
setgid monasca# k9 X- f, G6 B0 S: ?. a
setuid monasca
6 @% j* O% S3 {9 Q5 N/ zexec /usr/local/bin/gunicorn -n monasca-api -k eventlet --worker-connections=2000 --backlog=1000 --paste /etc/monasca/api-config.ini - 安装monasca-persister
' ~9 w. m+ j& P( O1 m8 w- r创建monasca-persister启动脚本
7 U6 T; Y, z. ]( yvim /etc/init/monasca-persister.conf
3 t( h: C a7 A. l0 V5 e# I) @# Startup script for the Monasca Persister
9 ^( R1 s! M6 t1 r( B6 z
' {; M1 k; k* E5 Vdescription "Monasca Persister Python app"* y! o( z( H! h5 e- e, b* k
start on runlevel [2345]
+ J: H2 e3 N9 }7 c9 Q
~' W$ F- T1 f# K* s4 [. P R+ k* k2 {console log7 \" r; }3 N' _7 F6 y5 N. N
respawn- Y. a! w' i0 g# n9 k0 k# m- E
9 C9 u9 T4 A0 l% b+ p1 Z, nsetgid monasca1 j3 q* D0 m3 Z( b' ~8 E0 `
setuid monasca
, f0 h. p. y& j0 Yexec /usr/bin/java -Dfile.encoding=UTF-8 -cp /opt/monasca/monasca-persister.jar monasca.persister.PersisterApplication server /etc/monasca/persister-config.yml
9 s2 ~0 Y+ M- z& x$ @启动monasca-persister
* r+ a' s1 a/ m: l( ?2 Q4 p4 q* Wservice monasca-persister start - 安装monasca-notificatoin
, i" k$ f$ {: k; e$ k+ Mpip install --upgrade monasca-notification
- K- J5 j! ?7 mapt-get install sendmail5 i$ Z! R$ F& U! G7 i# x p* f
将notification.yaml复制到/etc/monasca/ 创建启动脚本,vim /etc/init/monasca-notification.conf
/ h0 }; |# a# U1 ^4 I' b# Startup script for the monasca_notification
( r6 L* h1 I7 x
7 l. I9 v9 H+ e' n" g2 Y j8 m5 A6 |description "Monasca Notification daemon"
: z1 N4 A0 K; X q! Astart on runlevel [2345]( p2 s6 k8 e3 b4 f# H# H5 q
) y6 K2 q' v# ?$ }: U2 K% Sconsole log
; ^$ L* o5 a8 S+ ]: J! R2 yrespawn
+ {- y; W! ?0 s8 P1 F8 W# E2 }4 k% Q* M! k! }% {/ q Q
setgid monasca) ]! Z4 k4 d4 b$ {! I9 t' M
setuid monasca K, z0 Y5 c l: C5 O# @" Z
exec /usr/bin/python /usr/local/bin/monasca-notification" @6 z3 u( L+ v* l8 |0 S) F
启动通知服务
2 Y; l' R' E B- x; oservice monasca-notification start - 安装monasca-thresh 复制monasca-thresh到/etc/init.d/ 复制monasca-thresh.jar到/opt/monasca-thresh/ 复制thresh-config.yml到/etc/monasca /并修改主机以及数据库信息 启动monasca-thresh
: W" ]1 B( L7 m c6 R7 bservice monasca-thresh start - 安装monasca-agent
% r5 C4 c# m( M6 v! `7 [; R4 v在openstack控制器节点上安装monasca-agent,以便它可以监控openstack服务进程。* ^' j( ]+ a1 T& r( z( {" I6 v
sudo pip install --upgrade monasca-agent
7 t$ V, t4 A( i4 z4 S. V6 W$ P* H. C设置monasca-agent,将用户域ID和项目域ID更改为默认值。* P9 a# B7 N, V/ C, p: T
monasca-setup -u monasca -p tyun --user_domain_id e25e0413a70c41449d2ccc2578deb1e4 --project_domain_id e25e0413a70c41449d2ccc2578deb1e4 --user monasca \7 K8 w3 Q; {3 [
--project_name service -s monitoring --keystone_url http://192.168.1.11:35357/v3 --monasca_url http://192.168.1.143:8082/v2.0 --config_dir /etc/monasca/agent --log_dir /var/log/monasca/agent --overwrite
$ E7 z9 w# O& }+ b加载认证脚本admin-rc.sh,然后运行monasca metric-list。
5 {- t: F$ ~# E1 x) e
: }- h/ I& T- {: I2 sDevStack安装运行Monasca DevStack至少需要一台具有10GB RAM的主机。 可在此处找到安装和运行Devstack的说明: https://docs.openstack.org/devstack/latest/$ @0 X; W+ {* Z5 Z. d$ V
要在DevStack中运行Monasca,请执行以下三个步骤。 - 克隆DevStack代码库。7 Q& c& g7 h/ g6 _6 {
git clone https://git.openstack.org/openstack-dev/devstack
) ? P& Z; y1 N0 e' d8 D% t0 |2 D2 m- 将以下内容添加到devstack目录根目录中的DevStack local.conf文件中。如果local.conf不存在,则可能需要创建它。
6 K/ ~3 v# V% H$ n # BEGIN DEVSTACK LOCAL.CONF CONTENTS[[local|localrc]]DATABASE_PASSWORD=secretdatabaseRABBIT_PASSWORD=secretrabbitADMIN_PASSWORD=secretadminSERVICE_PASSWORD=secretserviceSERVICE_TOKEN=111222333444LOGFILE=$DEST/logs/stack.sh.logLOGDIR=$DEST/logsLOG_COLOR=False# The following two variables allow switching between Java and Python for the implementations# of the Monasca API and the Monasca Persister. If these variables are not set, then the# default is to install the Python implementations of both the Monasca API and the Monasca Persister.# Uncomment one of the following two lines to choose Java or Python for the Monasca API.MONASCA_API_IMPLEMENTATION_LANG=${MONASCA_API_IMPLEMENTATION_LANG:-java}# MONASCA_API_IMPLEMENTATION_LANG=${MONASCA_API_IMPLEMENTATION_LANG:-python}# Uncomment of the following two lines to choose Java or Python for the Monasca Pesister.MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-java}# MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-python}# Uncomment one of the following two lines to choose either InfluxDB or Vertica.# default "influxdb" is selected as metric DBMONASCA_METRICS_DB=${MONASCA_METRICS_DB:-influxdb}# MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-vertica}# This line will enable all of Monasca.enable_plugin monasca-api https://git.openstack.org/openstack/monasca-api# END DEVSTACK LOCAL.CONF CONTENTS W2 `- V1 }) L D9 |' k
- 从devstack目录的根目录运行“ ./stack.sh”。4 u- n5 A& W. W7 D
如果要使用最少的OpenStack组件运行Monasca,可以将以下两行添加到local.conf文件中。 disable_all_servicesenable_service rabbit mysql key; l" a7 r- c/ S& a" c" O
如果您还希望安装Tempest测试,请添加 tempest enable_service rabbit mysql key tempest' F! `) K6 v: o/ t
要启用Horizon和Monasca UI,请添加 horizon enable_service rabbit mysql key horizon tempest
8 G8 H( n! s. C+ r/ K, n使用VagrantVagrant可用于使用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时生效。 - 使用Vagrant将Vertica启用为Metrics DB# y4 j, \, y& @. c2 [8 \
Monasca支持同时使用InfluxDB和Vertica来存储指标和告警状态历史记录。默认情况下,在DevStack环境中启用InfluxDB。
2 X8 ~7 g4 O: [/ @! uVertica是Hewlett Packard Enterprise的商业数据库。可以下载免费的Community Edition(CE)安装程序,要启用Vertica,请执行以下操作:+ R9 c* P0 o+ `% M' [2 K- I7 P
- 注册并下载Vertica Debian安装程序https://my.vertica.com/download/vertica/community-edition/,并将其放在您的主目录中。不幸的是,DevStack安装程序没有可以自动使用的URL,因此必须单独下载该URL,并将其放置在安装程序运行时可以找到它的位置。安装程序假定此位置是您的主目录。使用Vagrant时,您的主目录通常将以“ /vagrant_home”挂载在VM内。
- 修改local.conf中MONASCA_METRICS_DB变量,配置Vertica的支持,如下所示:7 Z1 r# Z+ g1 |) q/ |! N' K8 ?
MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-vertica}, W3 g+ X: `; Y, N; A& V" W
: X: a$ b( {# {7 A
- 使用PostgreSQL或MySQL& V6 w" L) O/ Y( Q+ P" Q! I6 k4 e0 ~
Monasca支持使用PostgreSQL和MySQL,因此该devstack插件也支持。启用postgresql或mysql。: s6 p5 N- I% S* v: L
要使用MySQL设置环境,请使用:
6 l$ Q' ]; i! V+ w4 E$ s8 Henable_service mysql
; K( [3 ]8 O: w另外,对于PostgreSQL,请使用:* g) e& D! K( C5 G7 X! T
enable_service postgresql - 使用ORM支持: Y8 @! t) M1 t% } Y# o- ^% p1 F
ORM支持可以通过MONASCA_DATABASE_USE_ORM变量来控制。但是,如果启用了PostgreSQL(也称为数据库后端),则将强制提供ORM支持
, ?: Z: M1 n8 M+ f* u1 G9 m5 t( oenable_service postgresql - 加强Apache镜像
/ g+ J; r3 c x: {如果由于某种原因APACHE_MIRROR而无法使用,则可以通过以下方式强制执行:6 W! T/ B8 A( W
APACHE_MIRROR=http://www-us.apache.org/dist/ - 使用WSGI5 h' O4 ~7 T0 k' R5 S5 b
Monasca-api可以使用uwsgi和gunicorn与Apache一起部署。默认情况下,monasca-api在uwsgi下运行。如果您想使用Gunicorn,请确保其中devstack/local.conf包含:7 y3 z' _$ d; t' H1 a' W; u5 B& L
MONASCA_API_USE_MOD_WSGI=False
8 n; k& o; X- q# T# E 使用Monasca Dashboard安装完成Monasca Dashboard Plugin后,可以通过web控制台进行查看以及管理相应的监控与告警。 在操作控制台的“Monitoring”栏,单击“Launch Monitoring Dashboard“,这将打开在管理节点上运行的专用OpenStack Horizon门户。 在该面板中,您可以: - 单击OpenStack服务名称,以查看服务告警。
- 单击服务器名称以查看相关设备的告警。
6 O" U1 o/ n8 M; ^
监控信息存储在两个数据库中(Vertica/influxdb与mysql)。备份监控数据时,将同时备份两个数据库。看到 - 监控指标在Vertica中存储7天。
- 配置设置存储在MySQL中。
- 如果监控节点上的服务在高负载(例如15个控制网络和200个计算节点)下停止,则消息队列将在大约6个小时内开始清除。
" {2 Z% a( c% u3 L
|