2021-03-27

Мониторинг серверов c Grafana и Influxdb

Есть меня несколько серверов которые бы мне хотелось постоянно мониторить на предмет оперативной памяти, диского пространства и т.п. Хотя сами сервера расположены в разных местах все они объединены между собой по openvpn. Для того чтобы решить задачку мой выбор пал на связку influxdb+grafana.

Influxdb это так называемая timeseries база данных, в которой мы можем хранить данные которые изменяются во времени. Grafana - это универсальный UI который удобно использовать для визуального представления таких данных. InfuxDB и Grafana поднимаются на при помощи docker-compose. К при этом для того, чтобы послать данные состояния сервера используется баш скрипт который периодически запускается через cron и при помощи curl посылает данные на сервер

Таким образом я всегда могу видеть состояние того или иного сервера. Все системы будем подымать в докере для этого достаточно склонировать репозиторий с docker-compose который содержит в себе 3 образа - influxdb, grafana и chronograph.

git clone git@github.com:maxistar/docker-compose-influxdb-grafana.git
cd docker-compose-influxdb-grafana
git checkout influx1_8
docker-compose up -d

Influxdb версии 2.x требует авторизации и поэтому я использовал версию 1.8. Исправленный docker-compose.yaml живет в ветке influx1_8 где я использую именно эту версию, возможно в будущем разберусь как использовать и последнюю версию.

После того как InfluxDB и Grafana запущены, на сервере, который будем мониторить, создаем bash скрипт (script.sh).

#!/bin/bash

dbName="db0"

stat=`free | awk -v RS="" '{print "memory,host=acentauri used=" $9 "\nmemory,host=acentauri total=" $8 "\nmemory,host=acentauri swap=" $15 "\nmemory,host=acentauri swapused=" $16}'`

curl -s -i -XPOST "http://10.8.0.100:8086/write?db=db0" \
	--data-binary "$stat" 
 

делаем файл исполнимым и добавляем команду для запуска скрипта в cron:

chmod +x script.sh
contab -e

в открывшимся файле добавляем следующую строчку:

* * * * * /home/maxim/infrastructure/utils/memusage/script.sh

После того как данные начали посылаться на сервере настраиваем dashboard и наслаждаемся.

После того как начал мониторить состояние asterisk сервера он волшебным образом перестал зависать! Возможно его зависания были связаны с тем что зависает wifi модуль и я его перестаю видеть по сети.

 

Оставить комментарий

 
  2021-03-20

Компилируем Android приложения в Docker

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

Посидев пару вечеров, собрал простенький образ, который будет делать за меня всю черновую работу. Теперь, чтобы собрать любое приложение для android, достаточно выполнить вот такую команду из корня проекта:

docker run --rm -v ${PWD}:/var/app maxistar/android:latest bash \
 -c "gradle build && gradle compileDebugSources"

Готовый apk файл будет сохранен в папку app/build/outputs/apk/debug/app-debug.apk - его можно сразу скопировать не телефон и установить его (не забудьте разрешить установку приложений из неизвестных источников). 

Как был сделан этот образ? За основу взял образ Debian 9.

Установил Java 8 (Java 11 у меня не завелась если знаете как подружить gradle и java 11 поделитесь секретом)

apt-get update
apt-get -y install git wget unzip default-jdk

Для сборки нам нужен gradle установим его

wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -P /tmp
unzip -d /opt/android /tmp/sdk-tools-linux-3859397.zip

Скачаем Android SDK:

wget https://services.gradle.org/distributions/gradle-6.8.3-bin.zip -P /tmp
unzip -d /opt/gradle /tmp/gradle-6.8.3-bin.zip

Еще нужно установить переменные окружения.

ENV ANDROID_SDK_ROOT=/opt/android
ENV GRADLE_HOME=/opt/gradle/gradle-6.8.3
ENV PATH=${GRADLE_HOME}/bin:${ANDROID_SDK_ROOT}/tools/bin:${PATH}

Теперь нужно скачать инструменты для сборки android приложений.

sdkmanager --update
sdkmanager "build-tools;30.0.2" "platform-tools" "platforms;android-30"
sdkmanager --licenses

Готовый Dockerfile выглядит вот так:

FROM debian:9

MAINTAINER Max Starikov <maxim.starikov@gmail.com>

ENV ANDROID_SDK_ROOT=/opt/android
ENV GRADLE_HOME=/opt/gradle/gradle-6.8.3
ENV PATH=${GRADLE_HOME}/bin:${ANDROID_SDK_ROOT}/tools/bin:${PATH}

RUN apt-get update && apt-get -y install git wget unzip default-jdk

RUN wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -P /tmp && \
    unzip -d /opt/android /tmp/sdk-tools-linux-3859397.zip && \
    wget https://services.gradle.org/distributions/gradle-6.8.3-bin.zip -P /tmp && \
    unzip -d /opt/gradle /tmp/gradle-6.8.3-bin.zip && \
    sdkmanager --update && \
    yes | sdkmanager --licenses  && \
    sdkmanager "build-tools;30.0.2" "platform-tools" "platforms;android-30" && \
    yes | sdkmanager --licenses && \
    mkdir /var/app

WORKDIR /var/app

Следует заметить, что образ довольно большой (примерно 850Mb) - и для его использования нужно быстрое интернет соединение, но зато, единожды скачав, скачивать повторно docker его больше не будет.

Образ доступен на docker hub. Исходник находится на github.

 

Оставить комментарий

 
  2019-11-27

Оффлайн распознование текста - Kaldi ASR

Попробовал недавно систему распознавания речи Kaldi и оказалось, что все не так уж плохо, а даже на удивление хорошо. Качество распознавания оказалась ненамного хуже чем это делают это Гугл и Яндекс в онлайн, при этом совершенно бесплатно, без регистрации и СМС.  На хабре есть хорошая статья для на эту тему.

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

Имеется также и очень неплохая языковая русская модель. Если покапаться в сети можно найти модели и для других языков. Если покапаться в сети можно найти модели и для других языков.  

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

 

Оставить комментарий

 
  2018-06-13

Запуск Linux GUI приложений из под Android без рута

Обнаружил интересный способ запустить GUI приложение для Linux на Андроид без рута. Есть такой интересный эмулятор Linux окружения под Android - Termux. Эмулятор умеет много чего, например, имеется встроенный пакетный менеджер apt и можно полноценно установить nodejs и использовавать его для своих нужд.

К сожалению, в репозитории приложения нет GUI программ, однако умельцы научились запускать из него docker образ Linux Fedora Dektop, на котором уже можно запускать полноценные GUI приложения. Так как Fedora работает chroot окружении - накладные расходы на виртуализацию не сильно большие. В качестве графического сервера можно использовать XServer XSDL, который является нативным Андроид приложением.

Таким образом получается, что почти на любом телефоне с процессором ARM можно запускать Linux так же эффективно, как и на настольном компьютере или на ноутбуке.  Мне пока удалось запустить таким образом gimp и gedit, однако, в сети полно скриншётов с полными экранами KDE и LXDE - так что имеет смысл попробовать. 

Учитывая, что сейчас телефоны практически такие-же мощные как и настольные компьютеры, тема видится мне весьма интересной.

 

Оставить комментарий

 
  2018-04-28

Docker контейнер c GUI на удаленном компьютере

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

Обнаружил замечательный docker образ, который позволяет запускать графическое окружение и обращаться к нему через брауезер или через VNC viewer. 

Запускаем на удаленном сервере:

> docker run -p 6080:80 -p 5900:5900 -e VNC_PASSWORD=mypassword dorowu/ubuntu-desktop-lxde-vnc

И заходим на ваш новый компьютер через браузер:

http://yourremoteserver:6080

Получается вполне сносный рабочий копьютер на котором нормально открываются google и amazon сервисы.

 

Оставить комментарий