Статьи

Мониторинг больших данных встречает маленький Android

Первоначально это было размещено в блоге сообщества Zenoss .

Платформа DataSift потребляет, обрабатывает, фильтрует, хранит и передает терабайты социальных терабайтных данных компаниям по всему миру, и нам, в команде операций, необходимо было узнать о любых проблемах, а затем быстро и легко выявить и исследовать их.

Zenoss долгое время был основой нашего мониторинга общего состояния сервера и приложений, но мы планировали расширить наш мониторинг, связав его с показателями, которые должны были передаваться каждым компонентом программного и аппаратного обеспечения в платформе.

Использование форка statsd Etsy , форка Graphite и в сочетании с нашими собственными интерфейсами в каждом; мы начали собирать тысячи метрик в секунду. Эти показатели отображаются на экранах в области «Операции», а также оцениваются на предмет ошибочного поведения другой частью встроенного программного обеспечения .


(Стробоскоп, который можно увидеть на картинке, также подключен к Zenoss; http://www.youtube.com/watch?v=OqkILJCdCA0 )

При обнаружении ошибочных событий они отправляются в Zenoss (развернутый и настроенный Chef ), который автоматически знает о сервере или классе, к которому относится метрика, и может соответствующим образом установить серьезность (если мы не отправили переопределение как часть Запрос JSON API).

Это поставило нас на полпути к нашей цели, теперь Zenoss следил за платформой, используя различные пакеты Zenpack, а также был информирован о показателях платформы и их значении для здоровья. Однако мы еще не контролировали оповещение и подтверждение, если мы были в движении, на собрании, спали в постели или иным образом не возле стола или рядом с ноутбуком.

Будучи открытым исходным кодом с собственной поддержкой JSON, HTTP-библиотеками, фоновыми службами, уведомлениями и всем остальным, нам нужно было бы создать приложение, которое предупредило бы нас в моменты, когда Zenoss обнаружит проблему, позволит нам подтвердить событие, углубиться в детали и все с телефона или планшета, Android был простым выбором. Единственная проблема заключалась в том, что кто-то должен был написать это.

Познакомьтесь с Rhybudd:

Rhybudd по-валлийски означает «предупреждение», которое трудно произнести, но оно идеально соответствует идее программного обеспечения, которое реагирует на события и предупреждает вас.

Поскольку Rhybudd использует JSON API Zenoss, довольно просто выполнить первоначальную аутентификацию:

HttpPost httpost = new HttpPost(URL + "/zport/acl_users/cookieAuthHelper/login");

List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("__ac_name", UserName));
nvps.add(new BasicNameValuePair("__ac_password", Password));
nvps.add(new BasicNameValuePair("submitted", "true"));
nvps.add(new BasicNameValuePair("came_from", URL + "/zport/dmd"));

httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

// Response from POST not needed, just the cookie
HttpResponse response = httpclient.execute(httpost);
        
// Consume so we can reuse httpclient
response.getEntity().consumeContent();

Как только объект httpclient получил cookie, возвращенный этим запросом, можно довольно просто вызвать другие функции API:

HttpPost httpost = new HttpPost(ZENOSS_INSTANCE + "/zport/dmd/Events/evconsole_router");
httpost.addHeader("Content-type", "application/json; charset=utf-8");
httpost.setHeader("Accept", "application/json");
    
JSONObject dataContents = new JSONObject();
dataContents.put("evid",_EventID);

JSONArray data = new JSONArray();
data.put(dataContents);
        
JSONObject reqData = new JSONObject();
reqData.put("action", "EventsRouter");
reqData.put("method", "detail");
reqData.put("data", data);
reqData.put("type", "rpc");
reqData.put("tid", String.valueOf(this.reqCount++));
        
httpost.setEntity(new StringEntity(reqData.toString()));

HttpResponse response = httpclient.execute(httpost);
String zenossJSON = EntityUtils.toString(response.getEntity());
response.getEntity().consumeContent();
        
JSONObject ZenossObject = new JSONObject(zenossJSON );

С Android-версиями каждой конечной точки API завершите приложение, необходимое для их регулярного использования, чтобы опросить Zenoss, а затем обработать оповещения:

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

Intent Poller = new Intent(this, ZenossPoller.class);

PendingIntent Monitoring = PendingIntent.getService(this, 0, Poller, PendingIntent.FLAG_UPDATE_CURRENT);

am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, Long.parseLong(settings.getString("BackgroundServiceDelay", "60")) * 1000, Monitoring);

Если Rhybudd обнаружит событие, которое соответствует вашим настроенным фильтрам, он подаст уведомление со звуком и вибрацией (если включено), содержащее краткий обзор того, что вызвало предупреждение; В более старых версиях приложения щелчок по уведомлению запускает другой опрос, который в зависимости от скорости вашего соединения и других факторов может привести к недопустимому уровню задержки, прежде чем вы сможете начать подтверждать события. Один из ключевых принципов Руководства по дизайну Android заключается в том, чтобы приложение чувствовало себя отзывчивым, поэтому Rhybudd теперь будет запускать обновление только при запуске, если данные в локальном кэше устарели. Это означает, что последние события будут готовы к просмотру практически мгновенно при каждом запуске приложения (с включенным фоновым опросом)

,

Выполнение одного нажатия на событие приведет к отображению всплывающего окна на телефоне, позволяющего подтвердить или просмотреть сведения о событии, тогда как планшет переместится, чтобы мгновенно отобразить информацию о событии во всем доступном дополнительном пространстве экрана и предоставить подтверждение кнопка.

Однако вам не нужно нажимать на каждое событие, чтобы подтвердить его, вы можете долго нажимать на несколько событий, чтобы подтвердить все выбранные события одновременно, или нажать кнопку «Подтвердить все», которая, как его тезка предлагает подтвердить все неподтвержденные в настоящее время события.

Rhybudd имеет другие функции и возможности, о которых можно прочитать более подробно в вики Zenoss, но по своей сути это приложение, которое может опрашивать ваш экземпляр Zenoss каждые 30 секунд и каждый час, а затем оповещать вас через Android уведомления с выбранным вами звуком оповещения (можно даже настроить повторное воспроизведение звукового оповещения до тех пор, пока вы не подтвердите оповещение, если вы тяжело спите!). Получив уведомление, вы можете подтвердить его, углубиться в подробности и даже добавить сообщения в журнал или перейти к коллегам.

Проблемы и ошибки:

Не все элементы пользовательского интерфейса должны быть использованы. Первоначально Rhybudd предлагал пользователю ползунок поисковой панели, чтобы указать время между интервалами опроса, UI мудро это имело смысл для меня (без сомнения, рано утром), но многие люди обнаружили, что пытаясь переместить крошечный круг через 3 ” Поиск полосы с точностью до 1 пикселя в секунду невероятно бесит. Теперь это выпадающее меню.

Обратная и прямая совместимость с удаленной платформой является обязательным требованием. Когда Rhybudd был впервые выпущен, он был протестирован только на Zenoss 3.2, но люди уже использовали альфа-версию 4. К сожалению, ни бета-статус Rhybudd, ни альфа-статус Zenoss 4 не мешали людям оставлять отрицательные отзывы, если они столкнулись с проблемой.

Люди хотят получать уведомления о своих событиях, а не спамить о проблемах. До последней версии приложение будет вызывать уведомление для каждого нового события, полученного во время цикла опроса. В случае каскадного сбоя, который может привести к сотням отдельных уведомлений, разрушающим очередь уведомлений Android, строку состояния, звуковую подсистему и все остальное между ними. Как видно выше, новая версия создает одно уведомление с выдержками из наиболее важных предупреждений и счетчиком, указывающим, сколько других событий существует.

С нетерпением:

Rhybudd выполнил свою первоначальную цель — предоставить мне и остальной части нашей оперативной команды способ получать уведомления от Zenoss по нашему графику и давать нам возможность распознавать их, реагировать на них и при необходимости расширять их, но теперь задача состоит в том, чтобы гарантировать, что другие люди, у которых установлено приложение, могут делать то, что они хотят, чтобы иметь возможность делать с ним тоже.

В приложении все еще есть несколько острых краев, которые я планирую сгладить, но в действительности оно нуждается в том, чтобы сообщество указало, какие функции вы считаете наиболее полезными.

Не стесняйтесь, напишите мне [email protected] или пришлите мне твит; @NetworkString, чтобы сообщить мне любой ваш отзыв.

Приложение бесплатное, без рекламы, с открытым исходным кодом и доступно в Google Play .