• CentOS7安装OpenStack-10.安装Telemetry服务组件


    10. 0、概述

    • 早期OpenStack的计量功能由Ceilometer项目负责,后来Ceilometer一分为四,每个项目负责一个方面的工作。不得不说这是OpenStack开发中的一个特色,比如Cinder和Neutron也是从早期的Nova中拆分出来的。

    OpenStack Telemetry体系的架构如下:

    可以看到其由四个组件构成,包括:

    • Gnocchi:时间序列数据库,保存计量数据。
    • Panko:事件数据库,保存事件数据。
    • Ceilometer:数据采集服务,采集资源使用量相关数据,并推送到Gnocchi;采集操作事件数据,并推送到Panko。
    • Aodh:告警服务,基于计量和事件数据提供告警通知功能。

    四个组件分工明确,各司其职,使得计量系统结构清晰明了。

    另外,早期Ceilometer将原始计量数据保存到MongoDB,性能之差可以说几乎不可用。Gnocchi的出现使计量服务不论是在性能还是空间消耗上都有了质的飞跃,功不可没。也因为Gnocchi的先进性,它已经脱离OpenStack成为了一个独立项目,似有追赶其他时间序列数据库的态势。

     10.1、Gnocchi -- 时间序列数据库服务

    • Gnocchi接收来自Ceilometer的原始计量数据,进行聚合运算后保存到持久化后端。

    1) 三类存储后端

    Gnocchi中保存与资源使用量相关的计量数据,为了提高检索效率,额外将计量数据的元数据信息单独存储。另外由于从原始输入数据到最终存储的聚合数据,需要进行大量计算,为了缓冲输入与处理间的速率,引入缓存后端。因此Gnocchi中涉及三种存储后端:

    • 索引后端:存储计量对象和采集项的基础属性,比如对象类型(虚拟机、硬盘、网络)、原始资源uuid等。索引数据量不大,一半用MySQL。
    • 聚合数据后端:存储经过聚合计算的计量数据,比如cpu使用率的平均值、最大值、最小值等。推荐用Ceph,可以支持多实例共享数据。
    • 传入数据后端:保存来自Ceilometer的原始计量数据。默认与聚合后端一致,推荐使用Redis。

    2) 部署配置

    2.1)配置Keystone

    # 创建gnocchi用户并添加角色

    openstack user create --domain default --password gnocchi gnocchi
    openstack role add --project service --user gnocchi admin

    # 创建gnocchi服务

    openstack service create --name gnocchi --description "Metric Service" metric

    # 创建endpoints

    openstack endpoint create --region RegionOne metric public http://controller:8041
    openstack endpoint create --region RegionOne metric internal http://controller:8041
    openstack endpoint create --region RegionOne metric admin http://controller:8041

    2.2)配置Ceph

    # Ceph集群安装部署文档:https://www.cnblogs.com/liugp/p/12513702.html

    # 将聚合数据保存到Ceph后端,预先在ceph中分配存储池和权限

    # 分配存储池
    ceph osd pool create gnocchi 128 128

    # 分配权限 ceph auth get-or-create client.gnocchi mon 'allow r' osd 'allow rw pool=gnocchi'

    # 保存keyring文件。
    ceph auth get-or-create client.gnocchi | tee ceph.client.gnocchi.keyring

    把/etc/ceph/ceph.conf和/etc/ceph/ceph.client.gnocchi.keyring拷贝到Gnocchi节点上。

    2.3)配置MySQL

    # 使用MySQL保存索引数据,预先创建数据库和用户

    mysql -u root -p
    CREATE DATABASE gnocchi;
    GRANT ALL PRIVILEGES ON gnocchi.* TO 'gnocchi'@'localhost' IDENTIFIED BY 'gnocchi';
    GRANT ALL PRIVILEGES ON gnocchi.* TO 'gnocchi'@'%' IDENTIFIED BY 'gnocchi';

    2.4)安装redis

    # 安装包
    yum install redis -y

    # 修改配置/etc/redis.conf
    # 1)将这部注释掉,否则只有本机才能访问
    bind 127.0.0.1
    # 2)保护模式修改为no
    protected-mode no
    # 启动服务 systemctl start redis.service systemctl status redis.service systemctl enable redis.service

    2.5)安装Gnocchi

    yum install centos-release-openstack-rocky
    yum install openstack-gnocchi-api openstack-gnocchi-metricd python-gnocchiclient ceph-common -y

    2.6)编辑配置

    # /etc/gnocchi/gnocchi.conf:服务运行参数

    [DEFAULT]
    debug = true
    verbose = true
    log_dir = /var/log/gnocchi
    parallel_operations = 4
    coordination_url = redis://controller:6379
    
    [api]
    auth_mode = keystone
    host = 0.0.0.0
    port = 8041
    uwsgi_mode = http-socket
    
    [keystone_authtoken]
    region_name = RegionOne
    www_authenticate_uri = http://controller:5000
    auth_url = http://controller:5000/v3
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = gnocchi
    password = gnocchi
    service_token_roles_required = true
    
    [archive_policy]
    default_aggregation_methods = mean,min,max,sum,std,count
    
    [indexer]
    url = mysql+pymysql://gnocchi:gnocchi@controller/gnocchi
    
    [metricd]
    workers = 4
    metric_processing_delay = 60
    greedy = true
    metric_reporting_delay = 120
    metric_cleanup_delay = 300
    
    [storage]
    #driver = file
    driver = ceph
    ceph_pool = gnocchi
    ceph_username = gnocchi
    ceph_keyring = /etc/ceph/ceph.client.gnocchi.keyring
    ceph_timeout = 30
    ceph_conffile = /etc/ceph/ceph.conf
    file_basepath = /var/lib/gnocchi
    file_subdir_len = 2
    
    [cors]
    allowed_origin = http://controller:3000

    # 初始化数据库

    gnocchi-upgrade

    # 安装uwsgi(这里仅仅提供python2.7环境的安装方法)

    # 1、setuptools的安装
    wget --no-check-certificat  https://pypi.python.org/packages/source/s/setuptools/setuptools-2.0.tar.gz
    tar zxf setuptools-2.0.tar.gz
    cd setuptools-2.0
    python setup.py install
    
    # 2、pip的安装
    wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-check-certificate
    tar -xzvf pip-1.3.1.tar.gz
    cd pip-1.3.1
    python setup.py install
    
    # 3、修改环境变量
    # vi /etc/profile
    # 在最后的export PATH一行的最后面添加:
    export PATH=$PATH:/usr/bin
    
    # 4、安装依赖包
    yum install gcc* libssl-devel libffi-devel python-devel build-essential libxml2-devel libxslt1-devel
    
    # 5、安装uwsgi
    pip install uwsgi

    # 启动服务

    systemctl restart openstack-gnocchi-api.service openstack-gnocchi-metricd.service
    systemctl status openstack-gnocchi-api.service openstack-gnocchi-metricd.service
    systemctl enable openstack-gnocchi-api.service openstack-gnocchi-metricd.service

    2.7)验证使用

    # 查看归档策略

    openstack metric archive-policy list

    归档策略指定计量数据的聚合计算方式,包括聚合方法(mean、min、max、sum、std、count),和计量数据的统计时间粒度、数据点数。根据时间粒度和统计点数可以确定计量的时间跨度,根据一个数据点的大小在0.05 bytes~8.04 bytes,就可以确定一个metric需要使用的存储空间大小。Gnocchi内置了bool、low、medium、high四种归档策略。

    # 归档策略的作用单位是计量项(metric)。查看归档策略规则

    openstack metric archive-policy-rule list

    默认规则将所有metric关联到low策略,metric使用通配符匹配。

    # 查看资源列表

    openstack metric resource list

    资源对于OpenStack各个项目中的逻辑资源,比如实例、端口、镜像、卷等。由于还没有对接Ceilometer,所以列表为空。在Ceilometer章节部分可以看到最终结果。

    # 查看metric列表

    openstack metric list

    Metric是资源统计的基本单位,一个资源会有多个metrics,比如实例资源有cpu_util、memory.usage、disk.root.size等。

    # 查看计量数据

    openstack metric measures show {metric_uuid}

    Measures就是Gnocchi中最终保存的计量数据,即每个metric的数据点。

    10.2、Panko -- 事件存储服务

    Panko接收来自Ceilometer的事件数据,并提供查询接口。

    1)主要组件

    • panko-api: 提供事件数据的插入和查询接口。

    2)部署配置

    2.1)配置Keystone

    # 创建panko用户并添加角色

    openstack user create --domain default --password panko panko
    openstack role add --project service --user panko admin

    # 创建panko服务

    openstack service create event --name panko --description "Panko Service"

    # 创建endpoints

    openstack endpoint create --region RegionOne event admin http://controller:8977
    openstack endpoint create --region RegionOne event public http://controller:8977
    openstack endpoint create --region RegionOne event internal http://controller:8977

    2.2)安装配置MongoDB

    # 安装MongoDB,配置yum源

    cat << EOF > /etc/yum.repos.d/mongodb-org-4.0.repo
    [mngodb-org]
    name=MongoDB Repository
    baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.0/x86_64/
    gpgcheck=0
    enabled=1
    EOF
    yum clean all
    yum makecache
    yum update

    # 安装包

    yum -y install mongodb-org

    # 修改配置

    sed -i 's/127.0.0.1/0.0.0.0/' /etc/mongod.conf

    # 启动服务

    systemctl start mongod.service
    systemctl enable mongod.service

    # 使用MongoDB保存事件数据,预先创建数据库和用户

    # 连接mongo
    mongo
    # 切换到panko数据库 use panko
    # 创建用户,角色 db.createUser({user: "panko",pwd: "panko",roles: [ "readWrite", "dbAdmin" ]})

    2.3)安装Panko

    yum install openstack-panko-api python2-pankoclient -y

    # 编辑配置,/etc/panko/panko.conf:服务运行参数

    [DEFAULT]
    debug = true
    log_dir = /var/log/panko
    
    [database]
    connection = mongodb://panko:panko@controller:27017/panko
    
    [keystone_authtoken]
    region_name = RegionOne
    www_authenticate_uri = http://controller:5000
    auth_url = http://controller:5000/v3
    memcached_servers = controller:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = panko
    password = panko

    # 初始化数据库

    panko-dbsync

    # 建立服务文件

    Panko安装包内没有包含服务文件,为了便于管理,手动创建panko-api的服务文件

    $ cat /usr/lib/systemd/system/openstack-panko-api.service
    [Unit]
    Description=OpenStack Event API service
    After=syslog.target network.target
    
    [Service]
    Type=simple
    User=panko
    ExecStart=/usr/bin/panko-api --port 8977 -- --logfile /var/log/panko/api.log
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target

    # 启动服务

    systemctl daemon-reload
    systemctl enable openstack-panko-api.service
    systemctl start openstack-panko-api.service

    2.4)验证使用

    # 查看事件列表

    openstack event list

    由于还没有对接Ceilometer,所以列表为空。

    10.3、Ceilometer -- 数据采集服务

    Ceilometer是OpenStack计量体系中的数据采集组件,主要功能有:

    • 采集其他OpenStack服务的计量数据,比如虚拟机创建、删除操作等。
    • 从消息队列中读取其他服务发送的计量数据,比如虚拟机的CPU使用率、IO等。
    • 将采集到的数据发送到后端存储,比如Gnocchi、MongoDB、RabbitMQ等。

    1)主要组件

    • ceilometer-agent-compute:运行在计算节点上,使用libvirt接口采集虚拟机和宿主机的资源消耗数据,并发送到消息队列。
    • ceilometer-agent-central:运行在中心节点上,采集服务层面的计量数据,并发送到消息队列。
    • ceilometer-agent-notification:运行在中心节点上,从消息队列读取计量数据和事件,并将它们发送到后端存储。

    2)部署配置

    1)配置Keystone

    # 创建ceilometer用户并添加角色

    openstack user create --domain default --password ceilometer ceilometer
    openstack role add --project service --user ceilometer admin

    2)部署控制节点

    # 安装中心组件

    yum install openstack-ceilometer-notification openstack-ceilometer-central -y

    # 修改配置

    1. /etc/ceilometer/polling.yaml:配置采集项和采集时间间隔。
    2. /etc/ceilometer/pipeline.yaml:计量数据推送后端,默认是gnocchi://。
    3. /etc/ceilometer/event_pipeline.yaml:事件数据推送后端,默认是gnocchi://,修改为panko://。

    # /etc/ceilometer/ceilometer.conf:主要配置文件,服务运行参数。

    [DEFAULT]
    debug = false
    auth_strategy = keystone
    transport_url = rabbit://openstack:openstack@controller
    
    [service_credentials]
    auth_type = password
    auth_url = http://controller:5000/v3
    project_domain_id = default
    user_domain_id = default
    project_name = service
    username = ceilometer
    password = ceilometer
    interface = internalURL
    region_name = RegionOne
    
    [notification]
    store_events = true
    messaging_urls = rabbit://openstack:openstack@controller

    3)初始化数据库

    # 在Gnocchi上创建资源,要求Gnocchi已运行并在Keystone配置了endpoint

    ceilometer-upgrade

    # 启动服务

    systemctl enable openstack-ceilometer-notification.service openstack-ceilometer-central.service
    systemctl start openstack-ceilometer-notification.service openstack-ceilometer-central.service

    3)部署计算节点

    1)安装计算节点组件

    yum install openstack-ceilometer-compute -y

    2)修改配置

    /etc/ceilometer/polling.yaml:配置采集项和采集时间间隔。

    /etc/ceilometer/ceilometer.conf:主要配置文件,服务运行参数。

    [DEFAULT]
    auth_strategy = keystone
    transport_url = rabbit://openstack:openstack@controller
    
    [service_credentials]
    auth_type = password
    auth_url = http://controller:5000/v3
    project_domain_id = default
    user_domain_id = default
    project_name = service
    username = ceilometer
    password = ceilometer
    interface = internalURL
    region_name = RegionOne

    3)修改nova配置

    # /etc/nova/nova.conf中一下计量相关配置

    [DEFAULT]
    instance_usage_audit = true
    instance_usage_audit_period = hour
    
    [notifications]
    notify_on_state_change = vm_and_task_state
    notification_format = unversioned
    
    [oslo_messaging_notifications]
    driver = messagingv2

    其中要注意notification_format = unversioned,因为目前ceilometer只支持解析unversioned格式的计量消息,所以必须这样配置。

    4)启动服务

    systemctl start openstack-ceilometer-compute.service
    systemctl status openstack-ceilometer-compute.service
    systemctl enable openstack-ceilometer-compute.service
    
    systemctl restart openstack-nova-compute.service

    4)验证使用(控制节点

    配置了Ceilometer将计量数据存储到Gnocchi,事件数据存储到Panko,Ceilometer启动后,可以看到相关数据。

    # 查看metric列表

    openstack metric list --limit 10

    # 查看计量数据

    openstack metric measures show 01c64435-e1d8-47d2-8b2c-8745b2ab5ca7 --start 2020-03-15T14:40:00

    # 查看事件列表

    openstack event list --limit 1

    10.4、Aodh -- 告警服务

    Aodh根据Gnocchi和Panko中存储的计量和事件数据,提供告警通知功能。

    1)主要组件

    • aodh-api:运行在中心节点上,提供警告CRUD接口。
    • aodh-evaluator:运行中心节点上,根据计量数据判断告警是否触发。
    • aodh-listener:运行在中心节点上,根据事件数据判断告警是否触发。
    • aodh-notifier:运行在中心节点上,当告警被触发时执行预设的通知动作。

    2)部署配置

    2.1)配置Keystone

    # 创建aodh用户并添加角色

    openstack user create --domain default --password aodh aodh
    openstack role add --project service --user aodh admin

    # 创建aodh服务

    openstack service create --name aodh --description "Telemetry Alarm" alarming

    # 创建endpoints

    openstack endpoint create --region RegionOne alarming public http://controller:8042
    openstack endpoint create --region RegionOne alarming internal http://controller:8042
    openstack endpoint create --region RegionOne alarming admin http://controller:8042

    2.2)配置MySQL

    # 使用MySQL保存索引数据,预先创建数据库和用户

    mysql -u root -p
    
    CREATE DATABASE aodh;
    GRANT ALL PRIVILEGES ON aodh.* TO 'aodh'@'localhost' IDENTIFIED BY 'aodh';
    GRANT ALL PRIVILEGES ON aodh.* TO 'aodh'@'%' IDENTIFIED BY 'aodh';

    # 安装Aodh

    yum install openstack-aodh-api openstack-aodh-evaluator openstack-aodh-notifier openstack-aodh-listener openstack-aodh-expirer python-aodhclient -y

    # 编辑配置,/etc/aodh/aodh.conf:服务运行参数

    [DEFAULT]
    auth_strategy = keystone
    transport_url = rabbit://openstack:openstack@controller
    
    [database]
    connection = mysql+pymysql://aodh:aodh@controller/aodh
    
    [keystone_authtoken]
    www_authenticate_uri = http://controller:5000
    auth_url = http://controller:5000
    memcached_servers = controller:11211
    auth_type = password
    project_domain_id = default
    user_domain_id = default
    project_name = service
    username = aodh
    password = aodh
    
    [service_credentials]
    auth_type = password
    auth_url = http://controller:5000/v3
    project_domain_id = default
    user_domain_id = default
    project_name = service
    username = aodh
    password = aodh
    interface = internalURL
    region_name = RegionOne

    # 初始化数据库

    aodh-dbsync

    # 修改服务文件

    # Aodh服务默认监听8000端口,但帮助文档中描述的是8042端口。从Gnocchi监听8041端口来看,Aodh监听8042比较有延续性。修改aodh的服务文件,在启动命令中添加--port 8042参数:

    $ cat /usr/lib/systemd/system/openstack-aodh-api.service
    [Unit]
    Description=OpenStack Alarm API service
    After=syslog.target network.target
    
    [Service]
    Type=simple
    User=aodh
    ExecStart=/usr/bin/aodh-api --port 8042 -- --logfile /var/log/aodh/api.log
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target

    # 启动服务

    systemctl start openstack-aodh-api.service openstack-aodh-evaluator.service openstack-aodh-notifier.service openstack-aodh-listener.service
    systemctl status openstack-aodh-api.service openstack-aodh-evaluator.service openstack-aodh-notifier.service openstack-aodh-listener.service
    systemctl enable openstack-aodh-api.service openstack-aodh-evaluator.service openstack-aodh-notifier.service openstack-aodh-listener.service

    # 验证使用

    openstack alarm create --name cpu_high 
    --type gnocchi_resources_threshold 
    --description 'Instance Running HOT' 
    --metric cpu_util --threshold 65 
    --comparison-operator ge 
    --aggregation-method mean 
    --granularity 300 --resource-id 5204dcff-c148-406c-a8ce-dcae8f128e50 
    --resource-type instance --alarm-action 'log://' --ok-action 'log://'

    这里设置触发器状态变为alarm和ok时都执行log动作,即记录到aodh-notifier日志中。可以将log://替换为外部告警接口,触发邮件、短信等通知,或者heat、senlin的扩容接口,实现服务自动扩容。

    ~~~至此OpenStack计量体系的四个组件就部署完成了。~~~

  • 相关阅读:
    1)①爬取中国新闻网科技相关部分新闻
    摘记
    KNN算法[分类算法]
    Naive Bayes(朴素贝叶斯算法)[分类算法]
    Oracle 隔离级别
    解决问题没必要过于纠结于原理
    Oracle DBMS_METADATA.GET_DDL
    【听海日志】之ORACLE物化视图 [转]http://www.itpub.net/thread-1614812-1-1.html
    oracle 12c 基础
    Postgres查看数据库中的表及表中字段和类型
  • 原文地址:https://www.cnblogs.com/liugp/p/12513208.html
Copyright © 2020-2023  润新知