马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
monasca的所有组件都可以安装在一个节点上,例如openstack控制器节点上,也可以将其部署在多节点上。本文中,将在我的openstack集群中创建的新VM中安装monasca-api,该VM具有关联的浮动ip。Monasca-agent已安装在控制器节点上。代理节点通过浮动ip将指标发布到api节点。它们在同一子网中。 - 安装我们需要的软件包和工具9 M2 {2 D/ y O0 I" u, d S8 h
apt-get install -y git4 `+ q% J# u! V
apt-get install openjdk-7-jre-headless python-pip python-dev - 安装mysql数据库 如果您在openstack控制器节点中安装了monasca-api,则可以跳过安装,将已安装的msyql用于openstack服务。
5 D9 {% }1 j- l0 O9 U J/ S, Mapt-get install -y mysql-server
* w9 q3 r8 p/ ?! P创建monasca数据库架构,在此处下载mon.sql( https://raw.githubusercontent.com/stackforge/cookbook-monasca-schema/master/files/default/mysql/mon.sql)! z; n5 h1 { J8 V) r- v6 b
mysql -uroot -ppassword < mon_mysql.sql - 安装Zookeeper 安装Zookeeper并重新启动它。我使用本地主机接口,并且只有一个Zookeeper,因此默认配置文件不需要配置。
+ ~( O; H9 F; ~& Z: m apt-get install -y zookeeper zookeeperd zookeeper-bin service zookeeper restart8 Y7 X: z, F3 c3 D# {
- 安装和配置kafka: I3 o J4 W0 k* N' l6 A( t
wget http://apache.mirrors.tds.net/kafka/0.8.1.1/kafka_2.9.2-0.8.1.1.tgz" B/ ]6 B- g! o4 _& {
mv kafka_2.9.2-0.8.1.1.tgz /opt; V4 Q7 K! V0 v9 o
cd /opt# F A; G& z D; {. o
tar zxf kafka_2.9.2-0.8.1.1.tgz
$ v3 k& o9 o# r/ Y; e, e0 zln -s /opt/kafka_2.9.2-0.8.1.1/ /opt/kafka
# ^: X4 m/ n w: Tln -s /opt/kafka/config /etc/kafka6 T/ X. R Z6 v" }8 q( h) ^' i
创建kafka系统用户,kafka服务将以该用户身份启动。
+ _0 F: L7 X( L4 Xuseradd kafka -U -r& M$ q7 U' U+ {9 `* L! L; m( ^' G1 V
在/etc/init/kafka.conf中创建kafka启动脚本,将以下内容复制 到/etc/init/kafka.conf中并保存。
9 z o0 O% m0 M3 K# j2 M+ s3 I% pdescription "Kafka"
, F8 E! M- i" I: \) Y+ Y t( g) n0 z( S0 l
start on runlevel [2345]
1 }; W4 F& ] l3 P( c6 V8 Tstop on runlevel [!2345]
9 @8 q% I( N: N. @& u* ^
2 Q% |6 ?8 ?, w; J0 X" Urespawn; J" A3 A% }, ]: o7 ?7 e) Y6 B
/ ~8 C# l# D' S3 J, j' e7 V2 S" L
limit nofile 32768 32768
% ]" L$ V) o2 q. V; @$ R3 A% |- K- d4 I( d
# If zookeeper is running on this box also give it time to start up properly9 z; x7 m6 S* @7 o4 L) d
pre-start script
7 S: u3 i; ]$ j) ]) Uif [ -e /etc/init.d/zookeeper ]; then
4 c7 r1 q5 _% T5 J; [. {6 f3 y/ m8 }/etc/init.d/zookeeper restart! k) Q2 @) o1 V: O( Y
fi
! ?. x; c1 e* B4 G" h' u+ ]end script! t6 w S" k- J4 E9 l0 o0 U2 ?
8 K" p9 s4 l9 k& |1 L
# Rather than using setuid/setgid sudo is used because the pre-start task must run as root
+ c2 Q3 H% |. z" ~exec sudo -Hu kafka -g kafka KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" JMX_PORT=9997 /opt/kafka/bin/kafka-server-start.sh /etc/kafka/server.properties
# J7 b7 P5 _( @, S配置kafka,vim /etc/kafka/server.properties,确保配置了以下内容:# v2 t9 N8 G' }$ p/ A' s! f
host.name=localhost
0 E) W( E' o0 J$ ~advertised.host.name=localhost! J6 B6 l) J7 h0 z& R
log.dirs=/var/kafka
1 q+ k* Z1 e7 u6 c& S0 U创建 kafka log目录6 g$ c' ?! b% I3 O
mkdir /var/kafka; ?) v6 h, o2 L0 s" b5 r+ A, L. C
mkdir /var/log/kafka F4 q* N: R% b" y9 [7 T5 f
chown -R kafka. /var/kafka/
! t+ ^- N/ e$ ] hchown -R kafka. /var/log/kafka/
) b! ]8 X7 f1 ~& f# c启动kafka服务
8 m- P* F. {# [2 Qservice kafka start
8 j; t, ]' V/ g- y3 G# p下一步就是创建 kafka topics f* q1 y) u3 E, L
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 64 --topic metrics1 \+ w) Y& z4 v* w! P/ n; r4 q3 ] Q
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic events
/ I! @$ \7 S$ a3 k4 X; o' Z. a/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic raw-events
( e0 l z4 o: J% |0 U+ T/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic transformed-events
. I7 K8 [$ w; e; O- w& w7 c/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic stream-definitions
4 @) W. a/ u+ A6 r/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic transform-definitions. b9 o& Z3 { U9 m0 X
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic alarm-state-transitions
, X8 G. Z9 M. Z4 {0 f/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic alarm-notifications
8 p; R% L' g$ _3 k/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic stream-notifications3 w+ P, L( ^6 `
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic retry-notifications - 安装和配置 influxdb7 c" [5 L6 k4 K6 Q
curl -sL https://repos.influxdata.com/influxdb.key | apt-key add -; F# U( n. B1 ?& U7 N
echo "deb https://repos.influxdata.com/ubuntu trusty stable" > /etc/apt/sources.list.d/influxdb.list
$ X) a: ^( G$ Y6 y' tapt-get update6 Z; p3 f0 }1 L* Q) x7 g* h. T
apt-get install -y apt-transport-https
1 P7 S* h( h6 s8 v' Oapt-get install -y influxdb6 x( o L: x* r8 J% X- T2 _
8 D5 I% p( K* e& M/ m; a. `& U9 f
service influxdb start7 A, W! c- o S8 A1 h, X8 N
创建 influxdb database, user, password, retention policy, 同时修改密码。7 w- l4 {; s" U; J3 d
influx
( T5 d# O* x/ v# h6 A) QCREATE DATABASE mon9 _1 K$ ^. i6 U) |# m
CREATE USER monasca WITH PASSWORD 'tyun'/ N0 D# U1 I5 c: Z
CREATE RETENTION POLICY persister_all ON mon DURATION 90d REPLICATION 1 DEFAULT
{5 C6 x# |2 N; D# D; y) qexit - 安装与配置 storm
3 ?2 m! q% }7 W; E; U- L/ n( B4 a# fwget http://apache.mirrors.tds.net/storm/apache-storm-0.9.6/apache-storm-0.9.6.tar.gz
4 R) y# z0 |6 L; i) D) x# wmkdir /opt/storm% Q' z! ?5 G2 [! q) {6 ?; _0 l
cp apache-storm-0.9.6.tar.gz /opt/storm/$ @ u* ?. l4 S6 ^
cd /opt/storm/0 a; k: Y5 |6 u' O3 J. @. w* \* a" P
tar xzf apache-storm-0.9.6.tar.gz6 N/ I4 c* A; r: Z) \: c3 r
ln -s /opt/storm/apache-storm-0.9.6 /opt/storm/current7 e; B7 t! O0 I( d; g a
* B, }0 E w: S& \2 A2 x. T
useradd storm -U -r6 E3 e% c3 w8 M) V A
mkdir /var/storm
5 B' r, ?! ]) ]' m/ G Qmkdir /var/log/storm
$ P& z {: v5 f$ Dchown -R storm. /var/storm/
: n* O+ K S) e3 l& B* c1 Dchown -R storm. /var/log/storm/ s- d- w! t/ Y5 R( K; h8 C
修改storm.yaml, vim current/storm/conf/storm.yaml
A% Q# `; X+ v+ M5 t### base+ s, r. Q( x: J
java.library.path: "/usr/local/lib:/opt/local/lib:/usr/lib"
) a: ^2 Y5 X' J: k7 f' Sstorm.local.dir: "/var/storm"
; g6 r+ S% C) p3 S7 `' Y; L& ?3 F$ e
. o# Y6 u* }' ~% A9 `' c. d$ y### zookeeper.*
7 A$ d6 X$ C1 Xstorm.zookeeper.servers:& ^$ G. e% T r, V" W: H' \
- "localhost": Y5 k5 G8 j% x* E* a, K# `+ d
storm.zookeeper.port: 21819 n1 K" P+ d2 F2 O% I! K
storm.zookeeper.retry.interval: 5000
) ^0 A) ?) P3 Q6 D9 C Z+ Y! F0 tstorm.zookeeper.retry.times: 29
! F* X# u- K* M' @4 K+ G; F8 Rstorm.zookeeper.root: "/storm"
2 R% v) m" ]: Ystorm.zookeeper.session.timeout: 30000
- x5 E/ ]. z o4 }, G% j m( y+ ^) `4 H% t6 m- {# q4 B; I
### supervisor.* configs are for node supervisors, ?1 u5 W- ^+ \' ~5 a+ J* ^
supervisor.slots.ports:
S# b) I$ R- I% N" y6 Q/ ^6 n/ x$ V) S- 6701+ i' [% v& m0 S$ G7 l- | Q
- 6702! M3 `6 u4 T- q
- 6703* `' z: A2 E$ T% w! V
- 6704
6 }* |9 O( Y6 u5 I/ Z Vsupervisor.childopts: "-Xmx1024m"- `! o. y) u! {7 {" |8 S
3 ?$ R- u# M% e, \/ h. H. h7 K
### worker.* configs are for task workers. ?3 o6 I- p& E8 O& V9 u0 G6 f
worker.childopts: "-Xmx1280m -XX:+UseConcMarkSweepGC -Dcom.sun.management.jmxremote"
6 ?# Z% }, G$ \) I& r6 B, ^
7 o) p3 P3 B% F; }/ |8 Y2 ]0 ?### nimbus.* configs are for the masteri
1 W8 k8 O% P* o6 Y& \" fnimbus.host: "localhost"1 B: d6 I$ A, K- A0 F2 k
nimbus.thrift.port: 6627
( a( K3 Y) V7 \8 t3 t4 t, zmbus.childopts: "-Xmx1024m"
: j" R2 M, y, N/ C7 ~: {6 f+ i8 _/ N
' S8 `. ^6 `0 ~### ui.* configs are for the master5 j0 k. }% p& M. u- Z; J, q
ui.host: 127.0.0.1
$ g0 k6 l! p/ W6 Q2 @" {ui.port: 8078
+ V, f4 `& w0 y* Vui.childopts: "-Xmx768m"
2 [6 v; v0 Z) Z4 j: ?7 z
& E# K! Y/ b, J0 y' U& i### drpc.* configs
6 c3 V9 a8 {* W7 C2 C$ q& |5 A6 I, I. `* |' l5 }5 d0 J$ @
### transactional.* configs3 V% [$ o: N" r$ A0 G$ j" J* O/ P
transactional.zookeeper.servers:
, A5 X! e1 u) m, l- "localhost"! u1 ~# |4 Z) i. v0 B X/ w
transactional.zookeeper.port: 2181$ C, h: I) n C O$ E1 p
transactional.zookeeper.root: "/storm-transactional"8 Y* C# p0 V- [; B9 P. v
' W; R; a6 p9 z, b1 N
### topology.* configs are for specific executing storms+ ?* B/ N5 A0 o1 V
topology.acker.executors: 1, k M- x3 R% ]! p) c* Y4 h5 g
topology.debug: false
* V2 }. `9 i6 T' W: ^0 D. K1 {% D1 N/ R- t7 `! B* O
logviewer.port: 80773 c+ T1 _7 Y1 f1 a
logviewer.childopts: "-Xmx128m", v( B8 R9 K, [/ I
创建storm supervisor 启动脚本,vim /etc/init/storm-supervisor.conf
+ A. H' {& P3 _1 m7 h# ?7 I9 d# Startup script for Storm Supervisor7 g, C' e* m/ T( A( S9 J2 A( _7 m
y6 H; U/ J1 i# R" w
description "Storm Supervisor daemon"4 B9 h6 r' u6 ^& y& D f0 }* X/ V3 ~" e# q
start on runlevel [2345]
/ @& d4 `$ \+ B: \" ?+ _ p
: `: j, B9 ?9 m/ [2 K! O% N* P8 sconsole log4 t0 c$ x' f l0 p; w @' n
respawn
6 E' A* J8 _; K: O; H: w+ `1 `; W2 q
Q% C5 b: L# q6 s) o: wkill timeout 240
2 c9 W1 m8 O; \8 Trespawn limit 25 5
' V# \& l6 M9 ?/ e+ x& [
, R: T: ]% Q( n3 X: `( R/ }setgid storm* [$ E, L c7 J$ A' t" X3 G, ^1 W
setuid storm3 [6 J( x4 t- q
chdir /opt/storm/current
, Q. R+ O- C1 \0 bexec /opt/storm/current/bin/storm supervisor
9 v# [( i3 a$ [( ^6 z6 b3 J创建Storm nimbus 启动脚本。vim /etc/init/storm-nimbus.conf$ X9 E+ [! |' e5 H
# Startup script for Storm Nimbus6 D" Q8 ]4 q2 Y7 v& b" i
6 R% t: h9 o# Z# z( [description "Storm Nimbus daemon"$ W) Q( l6 Y* a' ^
start on runlevel [2345]( l3 f) r6 }) p; W
5 K( G2 e! t: c4 j, N1 [) }
console log
# q3 k: _3 ^/ A$ o0 L0 s- k3 a- W5 Orespawn
5 S' T, N8 ^; Q
q+ p j% b1 b" f4 c) ukill timeout 240
/ P$ O* H/ T s% _! g. @" xrespawn limit 25 5( y* V: v( P8 h8 n
# |: r4 p) q$ J; o$ D7 bsetgid storm) n" Z+ V# h' t# _9 p
setuid storm3 G. `( U. x5 ~% X7 O. B# K
chdir /opt/storm/current
& H$ d5 Y& G4 s' @8 E8 q* ]. j3 {, Sexec /opt/storm/current/bin/storm nimbus
3 t1 Q! {& O: [2 G启动supervisor 与 nimbus* L" i+ D, \) ]( C* M& J
service storm-supervisor start$ i n5 M4 z5 g: C
service storm-nimbus start - 安装monasca api python软件包- P! o& Z2 I+ e3 z( V) }4 X6 F+ f
一些monasca组件同时提供python和java代码,主要是我选择python代码进行部署。5 R3 H& B0 K9 G: P) E. X% y
pip install monasca-common
9 Y# f, _! L& J" U7 u6 L# Rpip install gunicorn
$ S; p3 D' c- `7 Qpip install greenlet # Required for both
- ^* p9 k# W5 g& mpip install eventlet # For eventlet workers6 i0 z' I; v2 e( w+ H5 e
pip install gevent # For gevent workers
& D+ C# D: f- u/ T, a) Z( }. o$ K ~+ opip install monasca-api" P$ _) V7 q9 T! n. E
pip install influxdb
; y. r( Y6 Q) @$ k. j. ?vim /etc/monasca/api-config.ini,将主机修改为您的IP地址
( m' G: w- i# k% n[DEFAULT], D2 s1 g0 b# k2 N& C) W2 n) P" i% ^
name = monasca_api
( Y5 g* I) F% c! X0 s4 [% L0 o" H8 K3 u9 ^, j; L6 O% a+ y
[pipeline:main]
: r8 K a: o$ ^: S" h# Add validator in the pipeline so the metrics messages can be validated.
6 l3 T. y; \# Q P+ n1 w }pipeline = auth keystonecontext api
; s9 ?/ V9 Z# X* E2 H0 K0 K5 d) C1 V; o
[app:api]
8 C) l! G, ?( h$ e) Ppaste.app_factory = monasca_api.api.server:launch
# G e2 q6 `9 }! k1 h) e0 U' N: r) ~2 f, g4 Z
[filter:auth] E) P$ d3 g3 p3 K" {4 s
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
" `# R+ N7 K# X) _6 ~7 X! N) |
7 m: A9 G/ P" r[filter:keystonecontext]
) p5 O- Z! f% _+ D) Xpaste.filter_factory = monasca_api.middleware.keystone_context_filter:filter_factory
% L7 V/ F5 l) W
$ R' c. L7 A) C: N' e; A+ @[server:main]
% g! r! |, E, i3 P, E/ xuse = egg:gunicorn#main
% L) T/ P# r1 z. H$ d* ?host = 192.168.2.23# v$ s3 q; {6 B3 A* Q
port = 8082
1 U8 M/ o6 A4 z) B g! Dworkers = 1. o* }4 M& S+ ]0 W" B8 z2 s: g
proc_name = monasca_api
9 s6 U: B5 V! ~9 ~vim /etc/monasca/api-config.conf,修改以下内容$ Q8 c0 g: L( S/ G0 [" Y3 T( N
[DEFAULT]; }0 S$ `+ e! K$ ^5 {/ ?
# logging, make sure that the user under whom the server runs has permission
4 D }( M7 m! x# to write to the directory.
) q5 K) W. |$ h3 M, R& ylog_file = monasca-api.log
! x, t" A4 k! Blog_dir = /var/log/monasca/api/
) S" O4 w0 ^7 P* b8 | Idebug=False
4 L2 Z6 m9 \6 ~, \2 c4 Q/ Nregion = RegionOne
' P, E7 W5 ?! A- R[security]
% Q# A7 t" a6 J% S, T6 [2 V& _# The roles that are allowed full access to the API.! X" O7 H0 b9 d' M: a2 y4 x
default_authorized_roles = admin, user, domainuser, domainadmin, monasca-user
- z7 {+ N, A) }+ d" e( ^$ i5 a: \! q- p& z+ i _
# The roles that are allowed to only POST metrics to the API. This role would be used by the Monasca Agent.' Y; B* @( {& g ~4 a5 U o
agent_authorized_roles = admin
3 B8 U* g8 X. S- A7 a# `' A! f2 N7 F+ b# M+ _
# The roles that are allowed to only GET metrics from the API./ s( s% B& V. |' D; F4 T. J1 R# r8 S# }
read_only_authorized_roles = admin
1 f- r* a/ M" k+ {
6 B" w5 p* H m$ B% d0 s# The roles that are allowed to access the API on behalf of another tenant.8 G) M5 p; ]: _3 K. f
# For example, a service can POST metrics to another tenant if they are a member of the "delegate" role.
8 j- P: V$ p o; F/ Qdelegate_authorized_roles = admin6 }" @! P6 P$ Z( u
6 F9 G& {4 N- V7 _[kafka]
# X- I8 j! ?; R& J# The endpoint to the kafka server
' x4 [( ~$ k9 E0 _# X; ]% b- Huri = localhost:9092( Y' @: l* N4 F& }
; W. E' g/ Z- ]1 E[influxdb]0 X k$ z( d8 E, P8 u
# Only needed if Influxdb database is used for backend.
& _' o& ]- i) q/ {2 }3 P7 U6 `9 q ]# The IP address of the InfluxDB service.
: b4 _7 u' W0 sip_address = localhost3 W0 W' E8 i, ] D
% W3 s ?* N* Y8 v# The port number that the InfluxDB service is listening on.
% C; Y8 g. X! `9 o, ?port = 8086
# M. G: J8 p7 J: {
& k0 V, P' S3 x0 e' }3 |# The username to authenticate with.
* o: n1 ^7 [# B0 R" n6 Huser = monasca
8 a. m) U9 U4 A) \7 f* _5 g3 n. [3 g7 s7 `
# The password to authenticate with.6 j( o- D9 k$ G8 Y( p5 z8 a
password = tyun
; \1 G+ x, L/ O& K# ~/ F. r2 L# M/ h# I. |0 B' B% C1 ~- M
# The name of the InfluxDB database to use.
( i' c j" k; i: X. c- V% h; rdatabase_name = mon J5 [9 h6 E- a3 e% {) _$ S6 l) ?# `; c
( D8 W# [4 W) w O3 n; p9 b
[database]/ ], F' @9 e1 j) t# W
url = "mysql+pymysql://monasca:tyun@127.0.0.1/mon"
- F {9 b( ^# Z7 v- Y
0 {$ G: C# w! _ n g. z' C. D4 A: O
[keystone_authtoken]
0 j& X" W& w6 c& M$ c Z( aidentity_uri = http://192.168.1.11:353573 H: Q) |& Z$ ~9 b$ v9 W! M0 O y
auth_uri = http://192.168.1.11:5000
; K' R" @& {. R V: r% {admin_password = tyun
" v! j% }- L0 [0 ~3 dadmin_user = monasca
2 x+ t6 w5 ~( i9 q5 Yadmin_tenant_name = service
) B* ?% x k, } }2 r& ~cafile =) F# G: k$ h4 \# E
certfile =2 \, v' P* x0 w8 j
keyfile =
/ d7 {" l/ k' jinsecure = false j* U. r" J. G& o; H
注释掉[mysql]部分,其他部分保持默认。8 c3 b$ d: X1 w
创建monasca系统用户并进入目录' R% z3 a7 N8 }& y$ j; }3 m( Q
useradd monasca -U -r" {- v4 q2 }5 j, t, n
mkdir /var/log/monasca
) f; P. g W7 [( @6 H/ n* J" Smkdir /var/log/monasca/api$ P, i7 k: R. O3 q$ w6 f& H
chown -R monasca. /var/log/monasca/0 ?: }( P! a7 v
在openstack控制器节点上,创建monasca用户密码,为租户服务中的用户monasca分配管理员角色。- g# _% W+ i; m1 s4 \: u
openstack user create --domain default --password tyun monasca' ~- f# d* U1 X2 W
openstack role add --project service --user monasca admin
1 s" x2 ^# s( c8 n7 W
# l' Z* @ W" b* ]openstack service create --name monasca --description "Monasca monitoring service" monitoring
; z3 V; }' x0 _. Z8 I: V, N9 s5 o# Z, \" p y# d
create endpoint
( `, {2 s- ~) Zopenstack endpoint create --region RegionOne monasca public http://192.168.1.143:8082/v2.0- v8 O/ I2 z3 u6 h" b% j& D% c7 Q4 U
openstack endpoint create --region RegionOne monasca internal http://192.168.1.143:8082/v2.0# o( L6 g: V; @ ]
openstack endpoint create --region RegionOne monasca admin http://192.168.1.143:8082/v2.0
+ x9 L, c9 _ p4 l" _* |" Y192.168.1.143是我的api虚拟机地址的浮动IP,请将其更改为您的IP。
4 C- @. v6 {1 O( D- R, L4 U创建monasca api启动脚本,vim /etc/init/monasca-api.conf$ W) x4 s; l8 S Q- p
# Startup script for the Monasca API
0 L2 c- |3 ]: S2 q1 h+ ?( F
; n. E1 Z4 F' M- f' ]. r/ zdescription "Monasca API Python app"
" Z$ f/ t* `6 x' q! R4 Jstart on runlevel [2345]! k/ M: p, G# R+ V
b0 G7 Y0 N: e) C+ h# i% ?console log
c* H. p1 F; u, irespawn" v. e2 s2 [7 x: p% L6 Y
7 k8 o [5 L1 d* C
setgid monasca) L* V$ j) e5 X+ P0 K6 I, E4 J
setuid monasca: a9 s8 Z5 w4 O. m4 V" V* M8 U6 J5 X
exec /usr/local/bin/gunicorn -n monasca-api -k eventlet --worker-connections=2000 --backlog=1000 --paste /etc/monasca/api-config.ini - 安装monasca-persister7 s, E6 w% E/ Q7 [& R
创建monasca-persister启动脚本
4 `. I1 w( S2 y9 h9 a6 \8 {9 A2 Zvim /etc/init/monasca-persister.conf4 h2 V! j4 H6 O0 l' v s* y
# Startup script for the Monasca Persister. n0 \) E5 @5 H' _ k. c5 ?1 l4 G
" B4 Z) r, d& _9 ]) [; i, Idescription "Monasca Persister Python app"- d0 a! l3 C5 H7 M. T9 Y( F% M# [8 f
start on runlevel [2345]$ J9 J) W6 T* q7 K
+ J4 F4 k# h7 s; i+ P
console log
. E. t2 Q; Z& B* x4 C( S* rrespawn2 {8 W# S$ `2 H) R# c
: A- F* M2 w# t
setgid monasca8 p3 k- R3 v( o9 L% W' F/ ?( [
setuid monasca& {- Q& ?5 [; S$ Z
exec /usr/bin/java -Dfile.encoding=UTF-8 -cp /opt/monasca/monasca-persister.jar monasca.persister.PersisterApplication server /etc/monasca/persister-config.yml
+ E6 F7 U3 }( l1 {5 h$ U启动monasca-persister
! k9 ~+ U* ^& e/ K6 \9 N5 nservice monasca-persister start - 安装monasca-notificatoin5 b3 G8 F- e: T/ g8 K2 j- w
pip install --upgrade monasca-notification
% l1 q8 _" U7 r) Lapt-get install sendmail/ a, A3 s$ Z7 N* T* a5 Q1 o8 X
将notification.yaml复制到/etc/monasca/ 创建启动脚本,vim /etc/init/monasca-notification.conf- I3 X& ` l4 l7 a% t
# Startup script for the monasca_notification
4 H2 \; L6 Q: n; ?$ K7 t. w9 D- V7 s. e# K& I+ u
description "Monasca Notification daemon"
% ?/ t$ E/ N! c3 _$ e3 rstart on runlevel [2345]
! E; b* H2 @ n- ^& W+ y9 c6 H" Z( d8 k& ?, T6 X
console log) U( b0 p% ^6 N7 r8 I
respawn, K4 V6 c" Y8 ^1 R1 V
6 g. I. ~: g( P5 i8 |" h* ]) ]1 |
setgid monasca
. T9 s; l9 ?4 [3 K- I9 u! n) ksetuid monasca- U# @% w9 J% H) `
exec /usr/bin/python /usr/local/bin/monasca-notification8 f. X8 V( q0 ]- h
启动通知服务7 Y( _& c. p' n
service monasca-notification start - 安装monasca-thresh 复制monasca-thresh到/etc/init.d/ 复制monasca-thresh.jar到/opt/monasca-thresh/ 复制thresh-config.yml到/etc/monasca /并修改主机以及数据库信息 启动monasca-thresh
) A& x9 m& f: Z8 _- A# m3 sservice monasca-thresh start - 安装monasca-agent# x8 F5 D; n5 d4 b7 R, ~
在openstack控制器节点上安装monasca-agent,以便它可以监控openstack服务进程。
$ q3 v! x, R8 f. U! Psudo pip install --upgrade monasca-agent9 O7 l' |- b' U! y f% u8 @% @3 m2 A
设置monasca-agent,将用户域ID和项目域ID更改为默认值。3 p. ]- O; b1 i4 E+ K/ b: S% t
monasca-setup -u monasca -p tyun --user_domain_id e25e0413a70c41449d2ccc2578deb1e4 --project_domain_id e25e0413a70c41449d2ccc2578deb1e4 --user monasca \
) J1 o4 E1 U% M( ]1 [; w3 }--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 p0 {4 T6 b# f8 F1 l, N
加载认证脚本admin-rc.sh,然后运行monasca metric-list。
! \2 m3 P7 z2 L/ [' _$ r
/ H' ]- M+ Y5 ADevStack安装运行Monasca DevStack至少需要一台具有10GB RAM的主机。 可在此处找到安装和运行Devstack的说明: https://docs.openstack.org/devstack/latest/& K+ y. Y% c2 a: e( Y+ y4 J
要在DevStack中运行Monasca,请执行以下三个步骤。 - 克隆DevStack代码库。- z3 s! {+ l- ~9 }
git clone https://git.openstack.org/openstack-dev/devstack
. w8 ]1 s! U$ i* ^- 将以下内容添加到devstack目录根目录中的DevStack local.conf文件中。如果local.conf不存在,则可能需要创建它。
: D; S# ^4 m5 j" D # 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 CONTENTS5 B' `& z" O* p& j2 p) z
- 从devstack目录的根目录运行“ ./stack.sh”。
0 D, |# u: k. e4 R" w6 N8 j
如果要使用最少的OpenStack组件运行Monasca,可以将以下两行添加到local.conf文件中。 disable_all_servicesenable_service rabbit mysql key. R8 W! W" y8 K9 |7 ?9 i2 R, _8 s4 f" Z1 K
如果您还希望安装Tempest测试,请添加 tempest enable_service rabbit mysql key tempest3 A3 |8 t) j& }! B) T; {/ T# \. i
要启用Horizon和Monasca UI,请添加 horizon enable_service rabbit mysql key horizon tempest
% A# i" Z& s7 @ g2 F使用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; H9 C) P" Y+ V" q2 O4 o1 q
Monasca支持同时使用InfluxDB和Vertica来存储指标和告警状态历史记录。默认情况下,在DevStack环境中启用InfluxDB。
6 ]: Z z0 y/ @. C0 Z' u$ iVertica是Hewlett Packard Enterprise的商业数据库。可以下载免费的Community Edition(CE)安装程序,要启用Vertica,请执行以下操作:" t0 P+ ~3 `; B. f9 \
- 注册并下载Vertica Debian安装程序https://my.vertica.com/download/vertica/community-edition/,并将其放在您的主目录中。不幸的是,DevStack安装程序没有可以自动使用的URL,因此必须单独下载该URL,并将其放置在安装程序运行时可以找到它的位置。安装程序假定此位置是您的主目录。使用Vagrant时,您的主目录通常将以“ /vagrant_home”挂载在VM内。
- 修改local.conf中MONASCA_METRICS_DB变量,配置Vertica的支持,如下所示:3 o6 X2 R& Z5 C* S4 i% A9 y
MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-vertica}2 o4 a$ ~" Q$ T
& N2 K/ L3 \! i# u: t0 Q& W- K- 使用PostgreSQL或MySQL A" J% b) I9 S; G- X. w- x
Monasca支持使用PostgreSQL和MySQL,因此该devstack插件也支持。启用postgresql或mysql。
- C; @, B# s u' W4 F( y+ k要使用MySQL设置环境,请使用:
% x$ A, W6 } L6 {5 J$ m, h+ {enable_service mysql4 _, V/ b4 v& ?$ M X
另外,对于PostgreSQL,请使用:
l% k. u: T( Z: j" Tenable_service postgresql - 使用ORM支持+ x& G) y( K1 a" r8 ]9 J
ORM支持可以通过MONASCA_DATABASE_USE_ORM变量来控制。但是,如果启用了PostgreSQL(也称为数据库后端),则将强制提供ORM支持5 m( v) N' e# f/ S& @. e2 ^
enable_service postgresql - 加强Apache镜像
+ _1 i3 ~9 t' P" z6 W# H如果由于某种原因APACHE_MIRROR而无法使用,则可以通过以下方式强制执行:7 n! {8 z" m. D' t
APACHE_MIRROR=http://www-us.apache.org/dist/ - 使用WSGI
5 [& R1 |, m6 U( C% Z* JMonasca-api可以使用uwsgi和gunicorn与Apache一起部署。默认情况下,monasca-api在uwsgi下运行。如果您想使用Gunicorn,请确保其中devstack/local.conf包含:
9 a1 q. c1 N9 F9 U8 `1 v; cMONASCA_API_USE_MOD_WSGI=False
% g1 u2 Y. y3 g# R! a t 使用Monasca Dashboard安装完成Monasca Dashboard Plugin后,可以通过web控制台进行查看以及管理相应的监控与告警。 在操作控制台的“Monitoring”栏,单击“Launch Monitoring Dashboard“,这将打开在管理节点上运行的专用OpenStack Horizon门户。 在该面板中,您可以: - 单击OpenStack服务名称,以查看服务告警。
- 单击服务器名称以查看相关设备的告警。
+ |3 P: c" p& ~
监控信息存储在两个数据库中(Vertica/influxdb与mysql)。备份监控数据时,将同时备份两个数据库。看到 - 监控指标在Vertica中存储7天。
- 配置设置存储在MySQL中。
- 如果监控节点上的服务在高负载(例如15个控制网络和200个计算节点)下停止,则消息队列将在大约6个小时内开始清除。
+ i8 S, P6 x& g; ^
|