[Проект] service tracking

  1. Идеята е да се напише елементарна система, която да следи различни "услуги" в и извън Интернет и да уведомява всички клиенти за промени. Услиги тук може да са както системни услуги върху даден хост, така и услуги в Интернет.

    Основният "агент", чрез който клиентите ще взаимодействат със системата, ще се избира групово от "живите агенти", ако той падне, това ще бъде засечено и друг "агент" ще бъде избран, за да замести падналия.

    Ще имплементирам следене на дадена услуга (не съм избрал каква), самите агенти и комуникацията между тяк, както и възможно най-автоматизираното им деплойване върху хост.

  2. Пускаш няколко multi-tier приложения и следиш дали някой от сървърите, върху които то върви, случайно не е паднал. Приложението ти например има нужда от 10 хоста, върху които да се изпълнява и ти искаш да следиш дали някой от тях не е паднал или дали не е спрял някой процес, на който ти разчиташ.

    За да постигнеш това деплойваш моят проект върху тези хостове и той ти доставя тази информация, като разбира се ако реално спре тока на един от хостовете, ти няма да загубиш връзка с приложението, което ти доставя информация за общото здраве на услугите ти.

  3. Ок, добих малко по-добра представа, но все още не си описал точно каква функционалност ще имплементира твоето приложение. Ако е просто следене на някакви процеси/сървъри и пращане на notifications като те паднат, това се прави за 15 минути.

    Много се колебая да ти кажа, че срока за одобряване на проект беше бъдни вечер и вече е късно. За да не се виждаме септември, моля те, опитай се добре и сравнително подробно да обясниш точно какво искаш да правиш - какво точно ще прави програмата, каква функционалност ще имплементираш, как се очаква да работи, как ще се интегрира с други програми и т.н.

    Помисли и внимателно си оформи мислите, така че да мога да напиша просто един ":thumbsup:" като коментар след това. Представи си, че си на наше място. Трябва ни достатъчно информация, за да може да преценим дали проектът ти е достатъчно сложен. Също така, трябва да разберем точно какво да очакваме, за да може по време на защитата ти да проверим дали си го изпълнил добре.

  4. Да, съгласен съм, извинявам се за което.

    Ще напиша RPC сървър и клиент за него.

    Сървърът ще приема и ще отговаря асинхронно на заявки през HTTP. Процесите които ще могат да се викат през него са:

    • CPU usage - Натовареност на процесора
    • Memory usage - Натовареност на RAM паметта
    • Traffic monitor - Брой активни TCP връзки, брой на новоотворените TCP връзки за интервал от x секунди, натовареност на мрежата
    • Active processes - Списък с активните процеси
    • Проверка за активността на даден процес
    • Стартиране на програма (по конфигуриран път до нея)
    • Спиране на програма (по ID, върнато от active processes)

    Сървърът ще чете своята конфигурация (bind address / port / trusted keys) от файл. Поддържаните формати са JSON и XML.

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

    Клиента:

    Конфигурира се през файл (JSON / XML). Опциите за конфигурация са:

    • Списък от хостве, които да се следят
    • Услуги, които да се следят
    • Интервал на проверка за дадна услуга
    • log файл за дадения хост
    • аларма
    • Действия, ако алармата се задейства

    За всяка следена услуга ще има набор от "аларми", които да се задействат.

    За CPU usage, Memory usage, Network traffic usage това представлява лимит на натовареността за даден период от време. (Т.е. 99% CPU usage, 99% RAM usage -> something wrong).

    За проверка на активност на процес алармата е спрян процес.

    Действия при задействане на алармата:

    CPU usage, Memory usage, Traffic Monitor, проверка на активност на процес поддържат действие спиране на процес.

    Проверка на активност на процеса поддържа действие стартиране на програма.

    Една конфигурация на сървъра би била (примерно):

    server: {  
      port: `<number>`,  
      bind-to-address: `<address / *>`,  
      trusted-certs: `<path to certifficates file>`  
      allowed-processes: `[cpu, memory, traffic]`  
    }
    

    Една конфигураця на клиент би била:

    host: {  
      address: `<address:port>`,  
      cert: `<path-to-certifficate-file>`,  
      monitor: {  
        service {  
          name: `"<име на услугата>"`,  
          alarm: `usage-over <number>`,
          action: `"stop: <service-name>"`,  
          poll-interval: `<milliseconds>`,  
        },  
        service {  
          name: `"<име на услугата>"`,  
          alarm: `"process-inactive"`,
          action: `"start: <service-name>"`,  
          poll-interval: `<milliseconds>`,  
        }  
      }  
    }  
    

Трябва да сте влезли в системата, за да може да отговаряте на теми.