SlideShare a Scribd company logo
1 of 39
Continuous monitoring
Привет
Меня зовут Дима
Мне 29 лет
И я мониторю
О чем же мы будем говорить?
Что происходило с мониторингом в последнее время
Как выглядит архитектура
Как построить процесс
Немножко классификации и истории
➔ Active / passive
➔ Pull / Push
➔ Source based / GUI
Passive
Собирают информацию и не
паясничают
➔ Collectd
➔ Zabbix
➔ Prometheus Exporters
➔ InfluxDB Telegraf
Active
Могут и рестартнуть, если чё
➔ Monit
➔ Forever
➔ PM2
➔ Upstart / Systemd
Push
Повсюду используют своих агентов
➔ Collectd
➔ Zabbix
➔ Sensu
Pull
Полагаются на проверенные решения
➔ SNMP
➔ telnet
➔ ssh
➔ http
Source based
Только конфиги, только хардкор
➔ Sensu
➔ Collectd
➔ Prometheus
GUI
Даже менеджер сможет настроить,
но не будет
➔ Zabbix
➔ PRTG
Что же выбрать?
➔ С кодом удобнее работать. Особенно, если ты не один
➔ Push очень мощный!
➔ Pull модель, внезапно, очень хороша для микросервисов
➔ Active как-то не прижился, все боятся restart loop.
◆ А restart в кластере может плохо кончится
Архитектура мониторинга
Capture
Store
Visualize
Alert
Capture. Снятие метрик
➔ Statsd
➔ Collectd
➔ Prometheus Exporters
➔ Influxdb Telegraf
➔ Elastic Beats
★ Nodejs / no Windows
★ C / SSC Serv for Windows
★ Go
★ Go
★ Go
Store. База данных
➔ Elasticsearch
➔ Graphite
➔ Prometheus
➔ InfluxDB
➔ OpenTSDB
Visualize
➔ Kibana
➔ Grafana
➔ Graphite
➔ InfluxDB Chronograf
Alerts
➔ Grafana alerts
➔Elasticsearch Watcher
➔Prometheus Alertmanager
➔Bosun
Alerts Processing
➔Riemann
➔PagerDuty / OpenDuty
Процесс
Внезапно
➔ Метрики -- одна из важнейших частей feedback loop
◆ Аналитика -- часть мониторинга
➔ Гипотеза, реализация, проверка, гипотеза
➔ Инфраструктура и код неразделимы
Проблемы
➔ Мониторинг -- blackbox для разработчиков
◆ Read Only модель
➔ Сенсоры пишут Ops
◆ Ops не знают код, dev не знают инфраструктуру
Фасилитируем девелоперов
➔ Monitoring as a code
◆ Storage as a Service
➔ Возможность протестировать
◆ Git flow
Monitoring as code
➔ Capture
➔ Store
➔ Visualize
➔ Alert
...as code
Capture as code
➔ Collectd with plugins
➔ Prometheus exporter
➔ Logstash
Collectd
<Plugin "java">
JVMArg "-Djava.class.path=/usr/share/collectd/java/collectd-api.jar:/usr/share/collectd/java/generic-jmx.jar"
LoadPlugin "org.collectd.java.GenericJMX"
<Plugin "GenericJMX">
<MBean "memory">
ObjectName "java.lang:type=Memory"
<Value>
Type "memory"
InstancePrefix "heap-"
Table true
Attribute "HeapMemoryUsage"
</Value>
<Connection>
Host "localhost"
ServiceURL "service:jmx:rmi:///jndi/rmi://localhost:31666/jmxrmi"
Collect "memory"
User "readOnlyRole"
Password "securePassword"
InstancePrefix "localhost"
</Connection>
</Plugin>
</Plugin>
Prometheus
Exporter
hostPort: 127.0.0.1:1234
jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
whitelistObjectNames: ["org.apache.cassandra.metrics:*"]
blacklistObjectNames: ["org.apache.cassandra.metrics:type=ColumnFamily,*"]
rules:
- pattern: "^org.apache.cassandra.metrics<type=(w+), name=(w+)><>Value: (d+)"
name: cassandra_$1_$2
value: $3
valueFactor: 0.001
labels: {}
help: "Cassandra metric $1 $2"
type: GAUGE
attrNameSnakeCase: false
Logstash
input {
file {
type => "nginx_access"
port => 6379
path => "/var/log/nginx/access.log"
}
}
filter {
if [type] == "nginx_access" {
json {
source => "message"
}
}
}
output {
elasticsearch {
codec => json
cluster => logs
host => "127.0.0.1"
embedded => false
protocol => "transport"
index => "logstash-%{+YYYY.MM.dd}"
}
}
Visualization as code
➔ https://gitlab.com/gitlab-org/grafana-dashboards
➔ https://github.com/jakubplichta/grafana-dashboard-builder
◆ pip install grafana-dashboard-builder
◆ grafana-dashboard-builder -c project.yaml --exporter file.yaml
Grafana dashboard builder
---
- defaultdashboard: &defaultdashboard
time_options: [1h, 6h, 12h, 24h, 2d, 7d, 14d, 30d]
refresh_intervals: [5m, 15m, 30m, 1h]
time:
from: now-2d
to: now
- name: overview
dashboard:
title: '{dashboard-prefix} Overview'
tags:
- tag1
- tag2
<<: *defaultdashboard
rows:
- row:
title: '{dashboard-prefix}-row'
panels:
- graph:
span: 3
title: Frontend
target: 'aliasByMetric({metric-prefix}.frontend.*)'
- graph:
span: 3
title: Backend
target: 'aliasByMetric({metric-prefix}.backend.*)'
Alert as code
➔ Prometheus Alertmanager
➔ Bosun
Prometheus Alertmanager Rules
alert.rules: |-
ALERT HighCPU
IF ((sum(node_cpu{mode=~"user|nice|system|irq|softirq|steal|idle|iowait"}) by (instance, job))
- ( sum(node_cpu{mode=~"idle|iowait"}) by (instance,job) ) )
/ (sum(node_cpu{mode=~"user|nice|system|irq|softirq|steal|idle|iowait"}) by (instance, job)) * 100 > 95
FOR 10m
LABELS { service = "backend" }
ANNOTATIONS {
summary = "High CPU Usage",
description = "This machine has really high CPU usage for over 10m",
}
Prometheus Alertmanager Global
route:
receiver: 'slack_chatbots'
group_by: ['alertname', 'cluster']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
routes:
- match:
service: frontend
receiver: slack_chatbots
- match:
service: backend
receiver: pager_duty
receivers:
- name: 'slack_chatbots'
slack_configs:
- send_resolved: true
api_url: 'https://hooks.slack.com/services/xxxxxxx'
channel: '#chatbots'
text: >-
Summary:
Description:
Details:
- =
Playbook:
Graph:
- name: 'pager_duty'
pagerduty_configs:
- service_key: xxxxxxxxxxxxxxxxxx
Bosun Alert Rule
alert cpu.linux {
template = generic
$notes = "High CPU load on server for last 30 minutes."
$series = 100 - graphite("groupByNode(servers.*.cpu.*.percent.idle, 1, 'avg')", "30m", "", "host")
$q = avg($series)
warn = $q >= 90
crit = $q >= 95
macro = common
warnNotification = $warnNotification
critNotification = $critNotification
}
Bosun Alert Global
macro common {
$warnNotification = slack
$critNotification = slack
$kibanaDomainName = kibana.mycompany.com
$grafanaDomainName = grafana.mycompany.com
}
notification slack {
post = https://hooks.slack.com/services/xxxxxxx
body = payload={"username": "bosun", "text": {{.|json}}, "attachments":[{"fallback": "Prod","color":
"#69B","title": "Prod env"}] }
next = slack
timeout = 4h
}
Storage as a Service
➔ Storage на dev, stage, prod
◆ https://github.com/vegasbrianc/prometheus
◆ https://github.com/hopsoft/docker-graphite-statsd
◆ https://github.com/sstarcher/docker-sensu
Заключение
➔ Мониторинг -- это непрерывный процесс
➔ Read/Write модель для разработчиков
➔ DevOps предоставляет сервис, а не сенсоры
Спасибо за внимание

More Related Content

What's hot

Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияYandex
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practiceAlexey Lesovsky
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework ApplicationsZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework ApplicationsZFConf Conference
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellAlexey Lesovsky
 
Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Yandex
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...it-people
 
Thumbtack Expertise Days # 5 - Ansible
Thumbtack Expertise Days # 5 - AnsibleThumbtack Expertise Days # 5 - Ansible
Thumbtack Expertise Days # 5 - AnsibleAlexey Remnev
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...AvitoTech
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Javaaragozin
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)AvitoTech
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам AnsibleDenis Honig
 
postgresql monitoring by okmeter.io
postgresql monitoring by okmeter.iopostgresql monitoring by okmeter.io
postgresql monitoring by okmeter.ioNikolay Sivko
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Prometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоPrometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоOntico
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Alexey Lesovsky
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumSQALab
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesTMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesIosif Itkin
 
Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...JavaDayUA
 

What's hot (20)

Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестирования
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework ApplicationsZFConf 2010: Performance of Zend Framework Applications
ZFConf 2010: Performance of Zend Framework Applications
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of Hell
 
Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
 
Thumbtack Expertise Days # 5 - Ansible
Thumbtack Expertise Days # 5 - AnsibleThumbtack Expertise Days # 5 - Ansible
Thumbtack Expertise Days # 5 - Ansible
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Java
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам Ansible
 
postgresql monitoring by okmeter.io
postgresql monitoring by okmeter.iopostgresql monitoring by okmeter.io
postgresql monitoring by okmeter.io
 
JavaDay'14
JavaDay'14JavaDay'14
JavaDay'14
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Prometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий ЛевченкоPrometheus мониторинг микросервисных приложений / Виталий Левченко
Prometheus мониторинг микросервисных приложений / Виталий Левченко
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и Selenium
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesTMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
 
Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...
 

Similar to Continuous monitoring

еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийsnowytoxa
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейCisco Russia
 
Техники пентеста для активной защиты - Николай Овчарук
Техники пентеста для активной защиты - Николай ОвчарукТехники пентеста для активной защиты - Николай Овчарук
Техники пентеста для активной защиты - Николай ОвчарукHackIT Ukraine
 
Организация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхОрганизация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхCodeFest
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
Cgroup и их использование в бк
Cgroup и их использование в бкCgroup и их использование в бк
Cgroup и их использование в бкYandex
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayAndrey Rebrov
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5Technopark
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаSergey Platonov
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментовVitalii Morvaniuk
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015OSLL
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммыPlatonov Sergey
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 

Similar to Continuous monitoring (20)

еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложений
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
 
Техники пентеста для активной защиты - Николай Овчарук
Техники пентеста для активной защиты - Николай ОвчарукТехники пентеста для активной защиты - Николай Овчарук
Техники пентеста для активной защиты - Николай Овчарук
 
Организация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхОрганизация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данных
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Cgroup и их использование в бк
Cgroup и их использование в бкCgroup и их использование в бк
Cgroup и их использование в бк
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Gen server
Gen serverGen server
Gen server
 
Введение в Docker
Введение в DockerВведение в Docker
Введение в Docker
 
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 

Continuous monitoring