OpenStack Telemetry系统架构及实践

1. 概述

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

OpenStack Telemetry体系的架构如下:

 

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

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

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

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

2. Gnocchi -- 时间序列数据库服务

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

2.1 三类存储后端

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

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

2.2 主要组件

  • gnocchi-api:提供数据传入接口,接收原始计量数据,并将它们保存到传入数据后端。同时提供聚合计量数据的查询接口,从聚合数据后端读取计量数据返回给用户。
  • gnocchi-metricd:从传入数据后端读取原始计量数据,进行聚合计算,然后将聚合数据保存到聚合数据后端。

2.3 部署配置

2.3.1 配置Keystone

创建gnocchi用户并添加角色:

# openstack user create --domain default --password-prompt 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.3.2 配置Ceph

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

# ceph osd pool create gnocchi 512 512
# ceph auth get-or-create client.gnocchi mon "allow r" osd "allow rwx pool= gnocchi"

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

2.3.3 配置MySQL

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

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

2.3.4 安装Gnocchi

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

2.3.5 编辑配置

/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_PASS
service_token_roles_required = true[archive_policy]
default_aggregation_methods = mean,min,max,sum,std,count[indexer]
url = mysql+pymysql://gnocchi:GNOCCHI_DBPASS@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

其中[cors]/allowed_origin是grafana的地址,前端直接访问gnocchi获取计量数据,需要配置允许跨域访问。

2.3.6 初始化数据库

# gnocchi-upgrade

2.3.7 启动服务

# systemctl enable openstack-gnocchi-api.service openstack-gnocchi-metricd.service
# systemctl start openstack-gnocchi-api.service openstack-gnocchi-metricd.service

2.4 验证使用

查看归档策略:

# openstack metric archive-policy list
+---------------------+-------------+-----------------------------------------------------------------------+---------------------------------+
| name                | back_window | definition                                                            | aggregation_methods             |
+---------------------+-------------+-----------------------------------------------------------------------+---------------------------------+
| bool                |        3600 | - points: 31536000, granularity: 0:00:01, timespan: 365 days, 0:00:00 | last                            |
| high                |           0 | - points: 3600, granularity: 0:00:01, timespan: 1:00:00               | std, count, min, max, sum, mean |
|                     |             | - points: 10080, granularity: 0:01:00, timespan: 7 days, 0:00:00      |                                 |
|                     |             | - points: 8760, granularity: 1:00:00, timespan: 365 days, 0:00:00     |                                 |
| low                 |           0 | - points: 8640, granularity: 0:05:00, timespan: 30 days, 0:00:00      | std, count, min, max, sum, mean |
| medium              |           0 | - points: 10080, granularity: 0:01:00, timespan: 7 days, 0:00:00      | std, count, min, max, sum, mean |
|                     |             | - points: 8760, granularity: 1:00:00, timespan: 365 days, 0:00:00     |                                 |
+---------------------+-------------+-----------------------------------------------------------------------+---------------------------------+

归档策略指定计量数据的聚合计算方式,包括聚合方法(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        
+---------+---------------------+----------------+
| name    | archive_policy_name | metric_pattern |
+---------+---------------------+----------------+
| default | low                 | *              |
+---------+---------------------+----------------+

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

查看资源列表:

# openstack metric resource list

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

查看metric列表:

# openstack metric metric list

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

查看计量数据:

# openstack metric measures show {metric_uuid}

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

3. Panko -- 事件存储服务

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

3.1 主要组件

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

3.2 部署配置

3.2.1 配置Keystone

创建panko用户并添加角色:

# openstack user create --domain default --password-prompt 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

3.2.2 配置MongoDB

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

# mongo
> use panko
> db.createUser({user: "panko",pwd: "PANKO_DBPASS",roles: [ "readWrite", "dbAdmin" ]})'

3.2.3 安装Panko

# yum install openstack-panko-api python2-pankoclient

3.2.4 编辑配置

/etc/panko/panko.conf:服务运行参数。

[DEFAULT]
debug = true
log_dir = /var/log/panko[database]
connection = mongodb://panko:PANKO_DBPASS@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_PASS

3.2.5 初始化数据库

# panko-dbsync

3.2.6 建立服务文件

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

3.2.7 启动服务

# systemctl enable openstack-panko-api.service
# systemctl start openstack-panko-api.service

3.3 验证使用

查看事件列表:

# openstack event list

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

4. Ceilometer -- 数据采集服务

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

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

4.1 主要组件

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

4.2 部署配置

4.2.1 配置Keystone

创建ceilometer用户并添加角色:

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

4.2.2 部署控制节点

1) 安装中心组件

# yum install openstack-ceilometer-notification openstack-ceilometer-central

2) 修改配置

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

/etc/ceilometer/pipeline.yaml:计量数据推送后端,默认是gnocchi://。

/etc/ceilometer/event_pipeline.yaml:事件数据推送后端,默认是gnocchi://,修改为panko://。

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

[DEFAULT]
debug = false
auth_strategy = keystone
transport_url = rabbit://openstack:RABBIT_PASS@controller//ceilometer

[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_PASS
interface = internalURL
region_name = RegionOne[notification]
store_events = true
messaging_urls = rabbit://openstack:RABBIT_PASS@controller//glance
messaging_urls = rabbit://openstack:RABBIT_PASS@controller//cinder
messaging_urls = rabbit://openstack:RABBIT_PASS@controller//ceilometer
messaging_urls = rabbit://openstack:RABBIT_PASS@controller//nova
messaging_urls = rabbit://openstack:RABBIT_PASS@controller//neutron

3) 初始化数据库

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

# ceilometer-upgrade

4) 启动服务

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

4.2.3 部署计算节点

1) 安装计算节点组件

# yum install openstack-ceilometer-compute

2) 修改配置

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

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

[DEFAULT]
auth_strategy = keystone
transport_url = rabbit://openstack:RABBIT_PASS@controller//ceilometer

[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_PASS
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 enable openstack-ceilometer-compute.service
# systemctl start openstack-ceilometer-compute.service
# systemctl restart openstack-nova-compute.service

4.3 验证使用

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

查看metric列表:

# openstack metric metric list --limit 10
+--------------------------------------+---------------------+---------------------------------+-----------+--------------------------------------+
| id                                   | archive_policy/name | name                            | unit      | resource_id                          |
+--------------------------------------+---------------------+---------------------------------+-----------+--------------------------------------+
| 0144c51d-9be7-42ea-975f-618b3744dc22 | ceilometer-low-rate | disk.device.write.bytes         | B         | 95f7fed3-6b7b-5f73-bfb7-a0cbf943b0f3 |
| 0189e22c-3e1f-4b8b-b5f1-b73bc13b7084 | ceilometer-low      | image.size                      | B         | dd962583-85f6-485f-98cd-b3a790ce3f8e |
| 01a33a01-18b4-4491-afac-1b2d745d3d36 | ceilometer-low      | volume.size                     | GB        | dcfdabba-f142-4c97-976f-f75d55c0953a |
| 01c64435-e1d8-47d2-8b2c-8745b2ab5ca7 | ceilometer-low      | disk.device.write.bytes.rate    | B/s       | cddaa528-bc6d-53e9-b205-d24194cc28bd |
| 02100b0a-592a-4919-a479-8ab68f64feb9 | ceilometer-low      | disk.root.size                  | GB        | 3c9c995a-3077-4b1a-85bc-46dc6b04b320 |
| 030e15f1-1c94-4288-999d-925bc68a3770 | ceilometer-low-rate | cpu                             | ns        | f89792f8-6801-4628-bfd3-39ea2e1d882b |
| 0313e6c6-86fd-4140-9276-8ba5b32576c3 | ceilometer-low      | disk.device.write.requests.rate | request/s | 841054da-180e-5f53-86a2-27faf09dbdd6 |
| 0366ac70-74b8-4571-b2f8-9552d86b7c2d | ceilometer-low      | volume.size                     | GB        | a5952eda-8531-4ccd-8c05-9a473b2e0aa5 |
| 040b9167-9e69-4da2-8313-d27fb713d2c5 | ceilometer-low-rate | disk.device.write.requests      | request   | 76a2dbef-8423-583a-9826-ecb1e222a824 |
| 045655d9-d274-4f61-b4d7-3019732e329d | ceilometer-low      | network.incoming.bytes.rate     | B/s       | d45dcf5a-2774-5b57-9a76-433cbd419fee |
+--------------------------------------+---------------------+---------------------------------+-----------+--------------------------------------+

查看计量数据:

# openstack metric measures show 01c64435-e1d8-47d2-8b2c-8745b2ab5ca7 --start 2019-08-23T14:40:00
+---------------------------+-------------+---------------+
| timestamp                 | granularity |         value |
+---------------------------+-------------+---------------+
| 2019-08-23T14:40:00+08:00 |       300.0 | 6362.93010769 |
| 2019-08-23T14:45:00+08:00 |       300.0 | 7153.82744187 |
+---------------------------+-------------+---------------+

查看事件列表:

# openstack event list --limit 1
+------------------------+----------------------------+--------------------------------------+-------------+------------------------------------------+-------------+
| event_type             | generated                  | message_id                           | traits:name | traits:value                             | traits:type |
+------------------------+----------------------------+--------------------------------------+-------------+------------------------------------------+-------------+
| compute.metrics.update | 2019-06-25T09:37:19.990000 | 5cde7191-a485-40ff-ab1d-8609c928bfa6 | service     | compute.rocky-cmpt-01                    | string      |
|                        |                            |                                      | request_id  | req-d41eb174-2b06-45df-9cff-c08755878c01 | string      |
+------------------------+----------------------------+--------------------------------------+-------------+------------------------------------------+-------------+

5. Aodh -- 告警服务

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

5.1 主要组件

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

5.2 部署配置

5.2.1 配置Keystone

创建aodh用户并添加角色:

# openstack user create --domain default --password-prompt 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

5.2.2 配置MySQL

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

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

5.2.3 安装Aodh

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

5.2.4 编辑配置

/etc/aodh/aodh.conf:服务运行参数。

[DEFAULT]
auth_strategy = keystone
transport_url = rabbit://openstack:RABBIT_PASS@controller//aodh

[database]
connection = mysql+pymysql://aodh:AODH_DBPASS@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_PASS[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_PASS
interface = internalURL
region_name = RegionOne

5.2.5 初始化数据库

# aodh-dbsync

5.2.6 修改服务文件

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 daemon-reload

5.2.7. 启动服务

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

5.3 验证使用

创建alarm:

# 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计量体系的四个组件就部署完成了。

 

转载于:https://www.cnblogs.com/ltxdzh/p/11400309.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品经理十二时辰:内容过于真实,扎心了!

各大平台也纷纷借势: 《阿里十二时辰》 《优酷十二时辰》 《垃圾十二时辰》 《深圳十二时辰》 《北京十二时辰》 《考研人十二时辰》 …… 各种十二时辰刷爆朋友圈。 后台很多留言: 起点学院怎么没有出《产品经理十二时辰》呢?你这产品经理教…

iOS持久化存储-CoreData简介

本文目录 一、简介二、模型文件三、了解NSManagedObject对象四、CoreData中的核心对象五、代码实现六、打开CoreData的SQL语句输出开关七、创建NSManagedObject的子类 回到顶部一、简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能&…

CSS3的滤镜filter属性

css3的滤镜filter属性,可以对网页中的图片进行类似Photoshop图片处理的效果,例如背景的毛玻璃效果、老照片(黑白照片)、火焰效果等。一、blur(px)高斯模糊 二、brightness(%)亮度 三、contrast(%)对比度 四、drop-shadow()阴影 注…

云盘同步本地文件和QQ聊天记录

腾讯微云同步本地QQ聊天记录和QQ接受的文件;手机版本可同步通讯录和手机相册和视频。 360云盘同步本地文件和定时自动备份本地文件; 金山快盘可以同步通讯录、短信、通话记录和手机本地文件;(快盘仅适合同步手机信息&#xff0c…

Objective-C Runtime的数据类型

转自:http://www.cnblogs.com/whyandinside/archive/2013/02/26/2933552.html Class Objective-C是支持反射的,先来了解一下其如何表达一个类。在Objective-C的Runtime中有个类型是Class(只在Runtime环境中使用),用来表…

CSS3制作文字背景图

文字带上渐变色,或者说让文字透出图片。这些效果 CSS 属性也可以完成。 方法一、利用CSS3属性mix-blend-mode:lighten;实现 使用 mix-blend-mode 能够轻易实现,我们只需要构造出黑色文字,白色底色的文字 div ,叠加上图片&#xff…

单行、多行文本超出显示省略号

前言:项目中我们经常遇到这种需求,需要对单行、多行文本超出显示为省略号。这篇文章主要总结了小编解决此问题的方法,有不足之处欢迎大家指正。单行文本省略 .ellipsis-line {border: 1px solid #f70505;padding: 8px;width: 400px;overflow:…

数据归一化matlab及python 实现

更多细节请查看 https://www.zhihu.com/question/20455227 归一化的目的简而言之,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系。 归一化首先在维数非常多的时候,可以防止某一维或某几维对数据影响过大…

机器学习综述

机器学习综述 摘要 本文主要参考中科院自动化研究所复杂系统与智能科学实验室王珏研究员《关于机器学习的讨论》,讨论机器学习的描述,理论基础,发展历史以及研究现状。 关键字:机器学习,科学依据,发展脉络 0引言 20世纪…

递归锁、信号量、GIL锁、基于多线程的socket通信和进程池线程池

递归锁、信号量、GIL锁、基于多线程的socket通信和进程池线程池 递归锁 死锁现象:是指两个或两个以上的进程和线程因抢夺计算机资源而产生的一种互相等待的现象 from threading import Thread from threading import Lock import time lock_A Lock() lock_B Lock(…

10 种机器学习算法的要点(附 Python 和 R 代码)

前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明、更个性化的技术。 也许我们生活在人类历史上最关键的时期:从使用大型计算机&#xff0…

8大策略让你对抗机器学习数据集里的不均衡数据

本文转自:http://www.36dsj.com/archives/35137 http://blog.csdn.net/heyongluoyao8/article/details/49408131 英文版本:http://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/ 你是不是也经历…

线程queue、事件event及协程

线程queue、事件event及协程 线程queue 多线程抢占资源,让其保持串行的两种方式: ​ 1、互斥锁 ​ 2、队列 线程队列分为以下三种: 1、Queue(先进先出) import queueq queue.Queue(3) q.put(1) q.put(2) q.put(3) # q…

不平衡数据下的机器学习方法简介

本文转自:http://baogege.info/2015/11/16/learning-from-imbalanced-data/ 引言 不管是在学术界还是工业界,不平衡学习已经吸引了越来越多的关注,不平衡数据的场景也出现在互联网应用的方方面面,如搜索引擎的点击预测&#xff08…

Class Imbalance Problem

本文转自:http://www.chioka.in/class-imbalance-problem/#comment-202282 What is the Class Imbalance Problem? It is the problem in machine learning where the total number of a class of data (positive) is far less than the total number of another c…

程序代码编辑器和浏览器代码编辑器&代码可视化执行过程

tutorialspoint http://www.tutorialspoint.com/codingground.htm 1. Sublime Text :http://blog.l1n3.net/editor/sublime-text-introduce/ 下载 :http://www.sublimetext.com/3 2. Notepad https://notepad-plus-plus.org/zh/ 更多细节请查看 htt…

听技术播客:一边学Python编程一边学英语

本文转自:http://codingpy.com/article/recommended-python-podcasts/ 学技术的朋友一般都会关注不少技术博客(blog),但是关注技术播客(podcast)的人估计不会太多。这里一方面也是由于相关的播客数量&#…

mysql补充

mysql补充 mysql使用流程 开启服务端,mysqld或者net start mysqlcmd下键入mysql -u root -p,输入设置好的密码,连接mysql客户端show databases;展示所有的mysql仓库创建一个库:create database CRM;然后sho…

编程书单:十本Python编程语言的入门书籍

本文转自:http://codingpy.com/article/10-python-beginner-books/ 本文与大家分享一些Python编程语言的入门书籍,其中不乏经典。我在这里分享的,大部分是这些书的英文版,如果有中文版的我也加上了。有关书籍的介绍,大…

Sublime配置与各种插件

本文转自:http://www.cnblogs.com/yyhh/p/4232063.html Sublime Text 3 安装Package Control 点击View -> Show Console 在下方命令行内,输入以下命令。 import urllib.request,os;pfPackage Control.sublime-package;ippsublime.installed_packages_…