马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
monasca的所有组件都可以安装在一个节点上,例如openstack控制器节点上,也可以将其部署在多节点上。本文中,将在我的openstack集群中创建的新VM中安装monasca-api,该VM具有关联的浮动ip。Monasca-agent已安装在控制器节点上。代理节点通过浮动ip将指标发布到api节点。它们在同一子网中。 - 安装我们需要的软件包和工具
, i6 U, j4 u/ p% M& I3 Fapt-get install -y git
i( r: S' P5 ^0 oapt-get install openjdk-7-jre-headless python-pip python-dev - 安装mysql数据库 如果您在openstack控制器节点中安装了monasca-api,则可以跳过安装,将已安装的msyql用于openstack服务。! ]; s) [8 d9 j1 D# B0 n8 W- n) `0 o
apt-get install -y mysql-server
~7 g+ U' ], k- j$ G+ \创建monasca数据库架构,在此处下载mon.sql( https://raw.githubusercontent.com/stackforge/cookbook-monasca-schema/master/files/default/mysql/mon.sql)- f" {! S }7 W2 h6 b6 c
mysql -uroot -ppassword < mon_mysql.sql - 安装Zookeeper 安装Zookeeper并重新启动它。我使用本地主机接口,并且只有一个Zookeeper,因此默认配置文件不需要配置。
5 ^# ]) j+ F# o: b8 E apt-get install -y zookeeper zookeeperd zookeeper-bin service zookeeper restart
7 C& _3 V+ P5 _7 W- 安装和配置kafka
5 d% T# ?: H, v: Y" R1 Mwget http://apache.mirrors.tds.net/kafka/0.8.1.1/kafka_2.9.2-0.8.1.1.tgz
$ U! j! L5 C3 D$ Q/ \3 m9 Gmv kafka_2.9.2-0.8.1.1.tgz /opt4 U. Q. {5 a# ^; O5 M( j8 z! w5 ]
cd /opt
* |4 [6 J4 @5 C& O4 X- ktar zxf kafka_2.9.2-0.8.1.1.tgz( f# ]: k8 Y) E6 {8 s8 F0 t* b7 \( }
ln -s /opt/kafka_2.9.2-0.8.1.1/ /opt/kafka3 B6 w- @- F( [! Z; p. G! i4 }8 g \
ln -s /opt/kafka/config /etc/kafka
' Z& M& o# D& h1 }. E7 o% O- n6 ]创建kafka系统用户,kafka服务将以该用户身份启动。9 O7 F0 Q; c- M1 v7 D/ ~
useradd kafka -U -r& q9 b# q7 c1 ^6 n9 ?) q
在/etc/init/kafka.conf中创建kafka启动脚本,将以下内容复制 到/etc/init/kafka.conf中并保存。
- o% Q4 \1 p4 k& Pdescription "Kafka"
/ F0 p% Z7 [& D+ y
2 ?3 h4 u' j; R1 Ostart on runlevel [2345]9 r% z$ D3 y1 m1 B. c! k+ n
stop on runlevel [!2345]' _3 R5 }' _" g3 s4 c
9 C* C4 S5 C4 K6 R; @respawn1 G, } A" Y9 b9 t# K3 \' j2 I% D# p
/ \; U$ y1 T- f8 k# hlimit nofile 32768 32768
$ d* R; D* U/ Z. b0 y0 I2 S7 H) m, a" T8 N0 a, ~3 E( {$ i0 T
# If zookeeper is running on this box also give it time to start up properly
% O* ^! e. |3 c h8 ypre-start script
: w. K& C& X- s9 F3 k; ^) k7 }# zif [ -e /etc/init.d/zookeeper ]; then# f- @9 C! J, a' k k1 [+ j5 J
/etc/init.d/zookeeper restart6 ?7 K0 s/ K6 n
fi8 ?8 R( X6 H" F3 B) z! f1 t0 m
end script
! [. Q, @ r" @+ p2 T; J
9 J1 J& H: Z* _/ l$ [0 m9 Z! f# Rather than using setuid/setgid sudo is used because the pre-start task must run as root
: u- [4 U d/ [, q( r9 aexec sudo -Hu kafka -g kafka KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" JMX_PORT=9997 /opt/kafka/bin/kafka-server-start.sh /etc/kafka/server.properties8 N+ d# L7 X: g
配置kafka,vim /etc/kafka/server.properties,确保配置了以下内容:& r! L; [! h& R2 {' x, d# e) n
host.name=localhost/ V2 I( A* l2 r- S9 B! {: l/ _
advertised.host.name=localhost
. H& T7 V8 ]" H/ plog.dirs=/var/kafka
! V& V! V1 r: D, i0 B0 h9 P- C% I5 l创建 kafka log目录
1 m% r I0 f; |7 q; P2 p) D! |; `& z7 rmkdir /var/kafka- v8 {/ r' Y, y/ x [% _8 q$ ~
mkdir /var/log/kafka
2 Y( ]9 Q# T# j$ J% Nchown -R kafka. /var/kafka/
0 @3 q6 X4 {4 N# G4 N+ mchown -R kafka. /var/log/kafka/
* B9 K0 |5 k3 g3 E2 W$ O3 u$ o启动kafka服务
" _# u, ~$ u9 a x; s0 f+ r" ~/ kservice kafka start
( @8 f4 l* |7 S( Y8 D0 }% o下一步就是创建 kafka topics
" n" L) t; ?6 z! O! a/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 64 --topic metrics
# F' ^; C! n! c% X; Q# Y/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic events1 _( M% i8 a9 @7 C- I1 R
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic raw-events2 Y) ~$ m" V, P' `& [0 i
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic transformed-events
7 u# T7 ^" {& d% b! `/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic stream-definitions7 s& }3 \4 P x8 ^3 a" {$ X3 S
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic transform-definitions2 E2 O/ a. u$ _% g
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic alarm-state-transitions
9 x% C0 d6 x% @4 M5 x+ b/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic alarm-notifications9 d" U3 {3 |. t! j( ?0 V3 a
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 12 --topic stream-notifications( u9 Q. _8 t: y l' ]1 _
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic retry-notifications - 安装和配置 influxdb
( p5 ]$ B" q1 K7 d; A6 {curl -sL https://repos.influxdata.com/influxdb.key | apt-key add -
/ a5 p, A6 i* x6 uecho "deb https://repos.influxdata.com/ubuntu trusty stable" > /etc/apt/sources.list.d/influxdb.list
& t, [7 ]% i5 c4 B2 b4 [( }apt-get update# Q* E/ k7 G0 F! k
apt-get install -y apt-transport-https
, v2 y4 B& }9 F; x, Bapt-get install -y influxdb
+ k* I5 g! T* V. h/ [' J; Z O1 y
% f( `) J: A n: p0 K9 U: \7 {service influxdb start" n# j8 P* E6 m; c Y
创建 influxdb database, user, password, retention policy, 同时修改密码。
& C; N9 U7 T5 _! Vinflux
" G! q0 A X r7 c' rCREATE DATABASE mon! ^- V6 l! T& x3 i. H4 P
CREATE USER monasca WITH PASSWORD 'tyun'
" ^3 G. v5 _9 z, K2 H' pCREATE RETENTION POLICY persister_all ON mon DURATION 90d REPLICATION 1 DEFAULT
3 b, Y9 a6 s( [# M/ mexit - 安装与配置 storm% A$ G/ F3 Y5 a5 M u
wget http://apache.mirrors.tds.net/storm/apache-storm-0.9.6/apache-storm-0.9.6.tar.gz
/ G; @1 n, i8 b d6 omkdir /opt/storm6 g- [/ }0 h1 i6 ^- B+ D1 k7 Y/ R
cp apache-storm-0.9.6.tar.gz /opt/storm/
9 S: ~- o; D5 i( d2 icd /opt/storm/
' `$ v; i' w/ Ttar xzf apache-storm-0.9.6.tar.gz0 z0 r# p2 b, A9 z; z
ln -s /opt/storm/apache-storm-0.9.6 /opt/storm/current+ ]" a/ Z/ O; Q! @- k* `0 Z
% f, g w, @% E, r+ U7 n
useradd storm -U -r
/ Z3 G @) I2 W, T7 e. lmkdir /var/storm- p! I7 l3 |' `6 X; @4 o! w
mkdir /var/log/storm! Q3 R& D* c) N" Y1 b! L
chown -R storm. /var/storm/& ]1 w4 `5 V: h+ ?% s
chown -R storm. /var/log/storm/
: N! N. i) f' @. [; v" D( d O1 w修改storm.yaml, vim current/storm/conf/storm.yaml
' \8 r+ x; Q" c& E4 o$ X### base5 C3 r5 _9 K! G$ k$ T
java.library.path: "/usr/local/lib:/opt/local/lib:/usr/lib"2 ^5 j$ t9 S: } w( T
storm.local.dir: "/var/storm"3 \0 A& [8 `1 b( S8 d
; S! r# R+ A) \; f! Q& B
### zookeeper.*
' Q) {2 }' ~# `8 @4 Ystorm.zookeeper.servers:' a) [2 P; h$ Y- {" c* L4 p
- "localhost"
! C q t- e: Hstorm.zookeeper.port: 2181
$ w# J m! L9 X7 B9 nstorm.zookeeper.retry.interval: 5000
: h3 v# V8 B: m& ]: _7 v5 G8 v+ hstorm.zookeeper.retry.times: 29; ~$ B- q8 p/ X2 A' {2 W# D8 e
storm.zookeeper.root: "/storm"
8 M! H+ c/ o/ G, g* ~. B9 U% Mstorm.zookeeper.session.timeout: 30000
; N% U0 G/ S/ t4 Z5 [& i v' t& y$ i% L
### supervisor.* configs are for node supervisors
w: j# | d1 J0 m1 ]supervisor.slots.ports:
}" p( M3 X. i- 6701, J* N; W! J' @. v; T% t: W) Z
- 6702
& H! o( p2 L: G- O5 |0 K: n! h- 67033 q* _ t$ ]/ A2 ?8 B Q
- 6704
# t% q4 P# f( o* A1 E* zsupervisor.childopts: "-Xmx1024m"
1 G4 t5 X" B6 h+ H+ @; ^+ C9 O! [
### worker.* configs are for task workers
9 V; ~) p( v& E1 D: h( t$ o: O8 Z" X2 cworker.childopts: "-Xmx1280m -XX:+UseConcMarkSweepGC -Dcom.sun.management.jmxremote"
) U1 Q& n% r5 o6 ?; c, O7 S" b* q4 D' p& x! S1 `' b7 G8 a
### nimbus.* configs are for the masteri: `/ F' [2 f' L
nimbus.host: "localhost"
4 t/ [9 n3 `4 U7 R& [% Dnimbus.thrift.port: 6627- [9 M: ^ w" b! i0 N- L. ]7 J6 x8 s
mbus.childopts: "-Xmx1024m"
& ~4 c y1 O6 [' O ?3 ?
7 t; d2 M4 @! D) w( y A### ui.* configs are for the master* O1 q3 `. Y: |8 W0 b" a. r8 B# g: T
ui.host: 127.0.0.1
" s# o4 k% Q- |1 x9 {$ M. Kui.port: 8078 l3 i* [1 C1 I
ui.childopts: "-Xmx768m"
( _, {& j9 l. {0 u8 g: e L* ?6 q) D3 r) s& P- T4 O! k- X" p+ e
### drpc.* configs4 s3 H+ A" a8 }$ u7 D/ V
1 D2 i* s% m# |1 J3 v, L### transactional.* configs3 E \0 _0 U% l; D* [
transactional.zookeeper.servers:
# g, B5 {2 g" z: B7 J3 ?2 q0 t- "localhost"; |. U, Q1 b$ ~; l+ t
transactional.zookeeper.port: 2181) A0 W7 O7 ~ [ w: b
transactional.zookeeper.root: "/storm-transactional"
4 L& v4 @+ q9 ~7 ?: M1 N b% e+ s* e0 D
### topology.* configs are for specific executing storms
$ s# h& I0 z# c$ U5 _( r. Ftopology.acker.executors: 1# }1 i; ^* Z: d. {% }
topology.debug: false. j0 o6 B# q/ N( ?
" z3 j# O" M1 W4 _: a' u& ~
logviewer.port: 8077& y1 {' q: {) w: e! J2 S0 p
logviewer.childopts: "-Xmx128m"
" { K* H# ]( I* d/ P创建storm supervisor 启动脚本,vim /etc/init/storm-supervisor.conf
3 t1 x) j, Z( P5 z# Startup script for Storm Supervisor9 U7 y! p* j6 b ]
`+ h! K% s1 @+ ?& Jdescription "Storm Supervisor daemon"
' [4 N$ w- q/ s9 B% ^start on runlevel [2345]
7 z2 h6 {7 W+ Y# |8 C5 ?1 ~; o9 J' H5 y/ V9 E# x% x# S
console log6 t9 q3 [7 y: S8 b# X
respawn
* Z2 _$ u1 e1 E/ n1 H \
$ a9 f" R- k* ]3 Z8 f. ^8 M! bkill timeout 2406 C9 `: X" q! i* Y3 w$ k
respawn limit 25 5" m5 p2 S( M/ Y2 o6 M
3 P" e$ k7 c1 [3 {' k) O
setgid storm
/ O$ w( |+ ]; r) tsetuid storm
3 r; g- L3 [. P+ M) N) e3 kchdir /opt/storm/current0 |2 v# d! x* z( L/ N2 d% A6 l2 F, c
exec /opt/storm/current/bin/storm supervisor. L7 R2 Y u$ y0 c# u9 ~
创建Storm nimbus 启动脚本。vim /etc/init/storm-nimbus.conf- l5 l) X+ N7 @
# Startup script for Storm Nimbus4 z7 f; Q9 p f( _" H
+ i( S3 c% B+ o9 H5 K5 T6 c& [description "Storm Nimbus daemon"" C+ }9 `4 ?* h
start on runlevel [2345]
) D. ^6 |5 k& T' b$ q. V. p! Z
) t$ T& ?1 n! f; qconsole log# X; P% a2 m; G" ]- E
respawn9 t- m" d) L- c' n
+ ]/ \! e+ v+ z
kill timeout 2405 l9 y3 \$ J; n
respawn limit 25 5
- s# F; e" ?" F+ V( g4 o7 W; \
4 \% p3 k7 J: u! k. }1 k% Bsetgid storm
4 \. ~+ O3 O7 x9 B; A6 c( Rsetuid storm
1 ^ H2 y3 v1 c% Lchdir /opt/storm/current& Y ~9 W- g* T, B$ m }+ E
exec /opt/storm/current/bin/storm nimbus
1 |( c; J4 s5 p启动supervisor 与 nimbus
4 m9 `& k& L8 I8 k+ `service storm-supervisor start* ~' M5 D7 h/ x8 P# l2 @2 a, m9 ~9 T
service storm-nimbus start - 安装monasca api python软件包) C$ x' l4 x. `3 s+ s
一些monasca组件同时提供python和java代码,主要是我选择python代码进行部署。: W! E" W+ b0 t3 F! |. g; w4 U
pip install monasca-common
! C: b4 U) m% s4 u9 Hpip install gunicorn- @. M8 f4 Z% N
pip install greenlet # Required for both
, _3 P4 S0 X [% Rpip install eventlet # For eventlet workers1 M. Z( ] L3 } x0 c( L
pip install gevent # For gevent workers
5 T" p# l% Z& f1 B N5 @; g' Gpip install monasca-api
! R0 ?- B( m7 p/ P4 N6 vpip install influxdb0 z: w# D0 \9 p1 u: X
vim /etc/monasca/api-config.ini,将主机修改为您的IP地址
1 D2 q. Q" d7 M4 _5 ]7 x2 f[DEFAULT]& _5 v h- `4 ~: Z/ h2 q) t Z# z
name = monasca_api
* v( ?6 t; \& Z( {
" O. i( E x2 H: \' `; t[pipeline:main]# S$ Z3 w" @9 j3 _9 Q7 M
# Add validator in the pipeline so the metrics messages can be validated.& T5 Y* x: D) H {" p S5 T. A
pipeline = auth keystonecontext api5 d4 w- i1 J; s2 B6 R
0 z! N6 `( U& r) l( Q- ~- T4 |; A[app:api]
9 n0 Z+ z/ }2 ]* Wpaste.app_factory = monasca_api.api.server:launch
! f, a' }4 i q; T6 B9 H+ n7 j5 N# D/ f1 D; G3 t6 ^
[filter:auth]
: B- {2 b+ F9 F6 u; a2 Fpaste.filter_factory = keystonemiddleware.auth_token:filter_factory
5 m4 q0 Z3 H& `! Q
+ A6 d. }: B* I2 v% L( f[filter:keystonecontext]7 w& f6 `* l3 K
paste.filter_factory = monasca_api.middleware.keystone_context_filter:filter_factory2 U$ m% N" O# A) @, n$ Q
0 c0 j, x) b: k8 I9 O
[server:main]
- \1 e3 ]* L) kuse = egg:gunicorn#main
; n% F- a, }% W& ~; z! z8 l- ihost = 192.168.2.23
* B7 @" G5 l- vport = 8082
7 @ x, ^# Y, o9 E5 | Kworkers = 1
* Y. Y6 \' J2 }: j( j1 uproc_name = monasca_api, O1 W$ R% H2 J* o
vim /etc/monasca/api-config.conf,修改以下内容
4 c' i8 [6 i$ D3 V6 D[DEFAULT]4 f9 {' d+ M0 T4 O, m/ I: |9 p
# logging, make sure that the user under whom the server runs has permission
. N/ ]2 ]8 v7 K$ Z+ f$ k# to write to the directory.: ^& J0 A: Q; }6 Q9 q6 Q& |
log_file = monasca-api.log
) _% Z9 |, {& N" y3 X: w Xlog_dir = /var/log/monasca/api/
) E# M% Q6 V$ T: C/ Kdebug=False3 @0 Y5 @7 J3 W. v. ? c
region = RegionOne) } J" P; N; p$ C6 h$ ]
[security]5 y4 x4 x$ Z) _4 R
# The roles that are allowed full access to the API.$ J$ v* l& W$ w1 O- I+ a5 u
default_authorized_roles = admin, user, domainuser, domainadmin, monasca-user3 t2 B) W' z$ S1 y; w1 e" ?8 c
* Y& N+ R8 X7 o/ _' M/ L
# The roles that are allowed to only POST metrics to the API. This role would be used by the Monasca Agent.
; p- _8 B2 r% B* @' dagent_authorized_roles = admin& ?. T; G! Z. L: }* R- \4 n
1 R3 O8 b P) Q9 C# The roles that are allowed to only GET metrics from the API.
% {5 g }; D Vread_only_authorized_roles = admin
# c, k% Q$ w9 x
1 w$ W6 }/ \, |" a( t# The roles that are allowed to access the API on behalf of another tenant.
9 s7 C- e' i0 i, U" X) p# For example, a service can POST metrics to another tenant if they are a member of the "delegate" role.# {. i$ X) R& L$ R0 p! g3 C' b' P
delegate_authorized_roles = admin
6 ]9 Z, ^6 D8 [9 Z# D3 E
F. {* y$ n o[kafka]* [& W5 [/ ]% V* |, a% n2 r
# The endpoint to the kafka server
. w, v4 J C8 b8 K0 M; O, c) suri = localhost:9092
; S2 t7 V% ?1 W1 i! W1 d
! p# y* `& u9 S1 @; |: B# i[influxdb]
8 G6 P* c# ~2 F* u3 B+ ]# Only needed if Influxdb database is used for backend.
7 C: [* V( ^ Q& L. t- X2 p6 F/ ~# The IP address of the InfluxDB service.& z8 C* a* v3 s2 l4 m! a
ip_address = localhost" Y7 ]9 w- @ v
( z3 @: g- B+ e6 S) V# The port number that the InfluxDB service is listening on.
# q# C+ u! x* T: _' B+ aport = 8086
& { E6 U' C9 p. t2 j% u
* ^( W# E8 O/ d8 B ^# The username to authenticate with.
% [# z9 J2 ~8 k K9 P& Buser = monasca
/ L# h7 V: b9 k( V/ d" ?/ u, ^ H# ?- P* v6 ?3 J2 P
# The password to authenticate with.
b5 @' Y+ u( }password = tyun
1 _, T% m' R# D) ^6 i5 X3 B) f/ }0 ~( u9 U" {6 Y; A
# The name of the InfluxDB database to use.# N8 `4 v0 {! A6 W: K; L3 L5 J+ z
database_name = mon4 A1 k' e% q; `6 H7 i& f2 b
3 L: \7 y; j: h
[database]
, a1 S9 B' A! C, R3 |url = "mysql+pymysql://monasca:tyun@127.0.0.1/mon"
8 f* I/ w: _: v$ }
3 g& G1 n8 N5 Z m) f1 A) b, `, z" N- _3 P# U& l
[keystone_authtoken]
- z9 Z6 p$ }) o- ^identity_uri = http://192.168.1.11:353573 t2 J! P1 F* q7 U4 k9 S+ P
auth_uri = http://192.168.1.11:5000* y7 Q% _% X* L% S
admin_password = tyun4 H+ y0 C( ?7 @: X; X
admin_user = monasca0 l7 J$ `5 r2 d! y% C! n
admin_tenant_name = service% m/ M: y& Y' S/ x* R, p
cafile =
/ d0 U( ]* S0 G" ycertfile =
0 c# _. u% t u$ ikeyfile =
/ e: ~* \) b+ n" C" ^insecure = false1 M3 F7 d- K& N+ e! S
注释掉[mysql]部分,其他部分保持默认。
( S% g" ^! b- W& G2 m' U创建monasca系统用户并进入目录$ ` m3 x5 k2 B/ S
useradd monasca -U -r
) E) @7 i( w' n0 B5 Rmkdir /var/log/monasca
: X- K6 d o( W! x, y1 |) Amkdir /var/log/monasca/api/ ]$ y8 p# C7 F9 @6 `: D
chown -R monasca. /var/log/monasca/% ~$ A) P, h. s1 ~: s$ ?! S
在openstack控制器节点上,创建monasca用户密码,为租户服务中的用户monasca分配管理员角色。
% `" C6 U3 R; L+ F- \4 j/ Topenstack user create --domain default --password tyun monasca' ~% O+ c v7 H& T
openstack role add --project service --user monasca admin
. G# S$ G/ |$ g) {9 m
" b% i9 G+ l @: topenstack service create --name monasca --description "Monasca monitoring service" monitoring* p K- T0 x B, K
% c; T6 \0 q" [; H' G; x7 ucreate endpoint
, V" l. I; Y3 Wopenstack endpoint create --region RegionOne monasca public http://192.168.1.143:8082/v2.0
9 L8 ?6 Y+ p; B+ Iopenstack endpoint create --region RegionOne monasca internal http://192.168.1.143:8082/v2.0
. {( D9 t/ g4 j6 s, [: Bopenstack endpoint create --region RegionOne monasca admin http://192.168.1.143:8082/v2.09 Z B F! c# Z4 B- |/ G6 h
192.168.1.143是我的api虚拟机地址的浮动IP,请将其更改为您的IP。
4 q! q& O& S+ Q! A) ~创建monasca api启动脚本,vim /etc/init/monasca-api.conf
1 x9 h6 S3 A9 r" H G8 q# Startup script for the Monasca API
/ g! c+ g' t8 [+ m, l
" ?9 L/ B& F% A* bdescription "Monasca API Python app"
# C, z5 u4 {2 c% a9 e; v0 ~. F2 `/ ?start on runlevel [2345]
: U) I% ?& r/ D/ e& D* a# W& R( n9 v2 C% |
console log
+ E. e& y- F m6 G" s6 prespawn1 n6 O5 P8 Q' ?3 M; @
! b3 y8 o2 P: s w1 K; v" H$ b
setgid monasca( I0 c. _5 Y# j7 C
setuid monasca& ~) I* ^% Q/ e) H; f# K$ d" g
exec /usr/local/bin/gunicorn -n monasca-api -k eventlet --worker-connections=2000 --backlog=1000 --paste /etc/monasca/api-config.ini - 安装monasca-persister6 ~3 y# D6 i8 k7 `
创建monasca-persister启动脚本( O7 a0 i3 p; `+ R1 A2 O6 g& v
vim /etc/init/monasca-persister.conf# F( h1 K) t3 @5 M! ^/ Y6 M$ G
# Startup script for the Monasca Persister
& H7 `6 |: f) T" o4 ?+ Y0 Q! Y0 R: }4 C# L5 Z3 ]/ R0 | Q
description "Monasca Persister Python app"
7 C/ h8 `6 k# S6 A7 \, Jstart on runlevel [2345]
# ^3 J0 [6 x9 E' X2 L, O6 \
( z6 @7 \3 v: A( G1 ~console log
+ `; g9 F4 g# \3 K J, N5 qrespawn5 I+ ^6 O) B6 M4 m
, a' t1 z1 c( a: P$ V# q0 Z! ~3 \
setgid monasca
- ~* T/ V/ v$ v- Z' p) csetuid monasca( Y& v4 F k% ]9 r- f) Z
exec /usr/bin/java -Dfile.encoding=UTF-8 -cp /opt/monasca/monasca-persister.jar monasca.persister.PersisterApplication server /etc/monasca/persister-config.yml* ?$ l( x+ u9 j- m K, \
启动monasca-persister
/ U7 Q8 s1 c" E P6 lservice monasca-persister start - 安装monasca-notificatoin" K1 Z# D0 k4 D$ e# v$ R& [2 B1 U1 ]
pip install --upgrade monasca-notification
W7 X3 }- @! x9 X+ r' _- O. japt-get install sendmail
, s6 M) F( M+ F& W/ a& Z( G将notification.yaml复制到/etc/monasca/ 创建启动脚本,vim /etc/init/monasca-notification.conf, R' `3 T% A5 V: c6 U5 @
# Startup script for the monasca_notification
2 U5 F B; V' c% z) v9 z; @/ n& ]$ R/ |* _
description "Monasca Notification daemon"# {' w0 `0 S( T' w% G) v4 `
start on runlevel [2345]; Q. N# x& r: w2 n
# J! z. _# k+ V. }6 X, qconsole log6 s+ g5 t0 v8 _' l" V4 A
respawn* [8 L# K( n: _9 |
2 v) K0 M5 W5 e( h" M( | hsetgid monasca
" ]) g( s! W- Gsetuid monasca$ ] v# t) w' B* }1 f* W. \
exec /usr/bin/python /usr/local/bin/monasca-notification; ^5 J3 {+ h" T' W: i
启动通知服务
, Y. @ a9 g2 iservice monasca-notification start - 安装monasca-thresh 复制monasca-thresh到/etc/init.d/ 复制monasca-thresh.jar到/opt/monasca-thresh/ 复制thresh-config.yml到/etc/monasca /并修改主机以及数据库信息 启动monasca-thresh) R/ `9 A7 } v' }7 y7 `
service monasca-thresh start - 安装monasca-agent, u/ t' q" H z/ B+ u6 Q5 G
在openstack控制器节点上安装monasca-agent,以便它可以监控openstack服务进程。9 i! O# h6 p" j& |" d! d( j' j
sudo pip install --upgrade monasca-agent
( _3 c$ C; }! u9 F设置monasca-agent,将用户域ID和项目域ID更改为默认值。
6 y3 A) N! O9 [9 Nmonasca-setup -u monasca -p tyun --user_domain_id e25e0413a70c41449d2ccc2578deb1e4 --project_domain_id e25e0413a70c41449d2ccc2578deb1e4 --user monasca \
- r/ G2 Y2 o( m2 V2 C--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+ J9 B; _$ x. T
加载认证脚本admin-rc.sh,然后运行monasca metric-list。
' ?8 n6 {- b; Q" _; w
6 H; B4 z. J8 UDevStack安装运行Monasca DevStack至少需要一台具有10GB RAM的主机。 可在此处找到安装和运行Devstack的说明: https://docs.openstack.org/devstack/latest/
& z' ?8 T, n: b$ c; |' V要在DevStack中运行Monasca,请执行以下三个步骤。 - 克隆DevStack代码库。
: M3 x8 X* L8 [$ m3 D git clone https://git.openstack.org/openstack-dev/devstack
7 t9 e7 u5 }* |- 将以下内容添加到devstack目录根目录中的DevStack local.conf文件中。如果local.conf不存在,则可能需要创建它。1 q/ R" {( j6 u6 H, 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 CONTENTS
. ] W- E0 Y5 f7 y- 从devstack目录的根目录运行“ ./stack.sh”。
% Q" f- }9 M! [2 L8 X* \; w9 L
如果要使用最少的OpenStack组件运行Monasca,可以将以下两行添加到local.conf文件中。 disable_all_servicesenable_service rabbit mysql key
7 M" R6 Z% w' d# e* a如果您还希望安装Tempest测试,请添加 tempest enable_service rabbit mysql key tempest
- Q9 k! z* Q4 m4 X w6 t要启用Horizon和Monasca UI,请添加 horizon enable_service rabbit mysql key horizon tempest- H, m1 b& K" ?& X& M
使用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
! p' f1 f4 o5 p: c9 u8 kMonasca支持同时使用InfluxDB和Vertica来存储指标和告警状态历史记录。默认情况下,在DevStack环境中启用InfluxDB。* y- ?. e5 a7 F
Vertica是Hewlett Packard Enterprise的商业数据库。可以下载免费的Community Edition(CE)安装程序,要启用Vertica,请执行以下操作:, E S6 ]0 ]- e% _& e0 z1 t3 e
- 注册并下载Vertica Debian安装程序https://my.vertica.com/download/vertica/community-edition/,并将其放在您的主目录中。不幸的是,DevStack安装程序没有可以自动使用的URL,因此必须单独下载该URL,并将其放置在安装程序运行时可以找到它的位置。安装程序假定此位置是您的主目录。使用Vagrant时,您的主目录通常将以“ /vagrant_home”挂载在VM内。
- 修改local.conf中MONASCA_METRICS_DB变量,配置Vertica的支持,如下所示:
9 l& M9 _# I+ ?7 H( q* tMONASCA_METRICS_DB=${MONASCA_METRICS_DB:-vertica}
$ A8 w8 t0 H/ O
5 F% s( ^ j* ]1 Q: k# Q- 使用PostgreSQL或MySQL
+ H2 E( [ X! A8 u3 w7 ]Monasca支持使用PostgreSQL和MySQL,因此该devstack插件也支持。启用postgresql或mysql。
, k. d5 C6 v7 w' w2 D' r: p要使用MySQL设置环境,请使用:- ~6 h- K0 y( V# O/ j
enable_service mysql
* Y+ T; t9 o- n6 W另外,对于PostgreSQL,请使用:# }4 X; k( ~3 p
enable_service postgresql - 使用ORM支持2 m+ R: ]# G5 _: E
ORM支持可以通过MONASCA_DATABASE_USE_ORM变量来控制。但是,如果启用了PostgreSQL(也称为数据库后端),则将强制提供ORM支持9 M# O! w0 o) a! S
enable_service postgresql - 加强Apache镜像* N/ C0 {0 V; r9 o. d
如果由于某种原因APACHE_MIRROR而无法使用,则可以通过以下方式强制执行:' N6 ~2 x" r2 ^) l' `
APACHE_MIRROR=http://www-us.apache.org/dist/ - 使用WSGI( @1 ]8 A9 h2 }' R- H9 R, @3 b. J
Monasca-api可以使用uwsgi和gunicorn与Apache一起部署。默认情况下,monasca-api在uwsgi下运行。如果您想使用Gunicorn,请确保其中devstack/local.conf包含:
" a- E0 U, c6 f% G/ a% y8 g$ qMONASCA_API_USE_MOD_WSGI=False5 s0 q' w5 d; H% l2 j
使用Monasca Dashboard安装完成Monasca Dashboard Plugin后,可以通过web控制台进行查看以及管理相应的监控与告警。 在操作控制台的“Monitoring”栏,单击“Launch Monitoring Dashboard“,这将打开在管理节点上运行的专用OpenStack Horizon门户。 在该面板中,您可以: - 单击OpenStack服务名称,以查看服务告警。
- 单击服务器名称以查看相关设备的告警。- [, t+ O$ q: ?
监控信息存储在两个数据库中(Vertica/influxdb与mysql)。备份监控数据时,将同时备份两个数据库。看到 - 监控指标在Vertica中存储7天。
- 配置设置存储在MySQL中。
- 如果监控节点上的服务在高负载(例如15个控制网络和200个计算节点)下停止,则消息队列将在大约6个小时内开始清除。+ R2 z8 c9 O9 H4 o* q. V) G
|