пятница, 3 ноября 2023 г.

Proxmox. Аналитика выделенных ресурсов

CSV файл со списком всех виртуальных маших и выделенных под них ресурсов 

pvesh get /cluster/resources --type vm --output-format json > /tmp/vm_exp_list.json

cat vm_exp_list.json | jq -r 'sort_by(.vmid)|.[]|select(.status == "running")| [.vmid, .node, .name, .maxcpu, .maxmem, .maxdisk]|@csv'

пятница, 14 июля 2023 г.

Сбор sFlow в Clickhouse для аналитики

Общая схема:

host-sflow -> sFlow -> goflow2 collector -> kafka protobuf -> clickhouse

1. Серверная часть сборки sflow

https://github.com/netsampler/goflow2
NetFlow/IPFIX/sFlow collector in Go


Kafka

Подготовить топик nflow

goflow2

Запущен в Docker

docker run --net=host -ti netsampler/goflow2:latest -transport=kafka -transport.kafka.brokers=localhost:9092 -transport.kafka.topic=nflow -format=pb -format.protobuf.fixedlen=true

 

Clickhouse

Скачать настройки протокола protobuf 

/var/lib/clickhouse/user_files/protocols.csv

Таблицы и подключение к kafka
CREATE TABLE IF NOT EXISTS nflow.flows_kafka
(
time_received UInt64,
time_flow_start UInt64,
sequence_num UInt32,
sampling_rate UInt64,
sampler_address FixedString(16),
src_addr FixedString(16),
dst_addr FixedString(16),
src_as UInt32,
dst_as UInt32,
etype UInt32,
proto UInt32,
src_port UInt32,
dst_port UInt32,
bytes UInt64,
packets UInt64
) ENGINE = Kafka()
SETTINGS
kafka_broker_list = '127.0.0.1:9092',
kafka_topic_list = 'nflow',
kafka_group_name = 'clickhouse',
kafka_format = 'Protobuf',
kafka_schema = 'flow.proto:FlowMessage',
kafka_skip_broken_messages = 1;
        
CREATE TABLE IF NOT EXISTS nflow.flows_raw
(
date Date,
datetime DateTime,
sequence_num UInt32,
sampling_rate UInt64,
sampler_address String,
src_addr String,
dst_addr String,
src_as UInt32,
dst_as UInt32,
etype UInt32,
proto UInt32,
src_port UInt32,
dst_port UInt32,
bytes UInt64,
packets UInt64
) ENGINE = MergeTree()
PARTITION BY date
ORDER BY datetime
TTL date + toIntervalDay(30)
SETTINGS index_granularity = 8192;

        
CREATE MATERIALIZED VIEW IF NOT EXISTS nflow.flows_raw_mv TO nflow.flows_raw
AS SELECT
toDate(time_received) AS date,
time_flow_start AS datetime,
sequence_num,
sampling_rate,
IPv4NumToString(reinterpretAsUInt32(substring(reverse(sampler_address), 13, 4))) AS sampler_address,
IPv4NumToString(reinterpretAsUInt32(substring(reverse(src_addr), 13, 4))) AS src_addr,
IPv4NumToString(reinterpretAsUInt32(substring(reverse(dst_addr), 13, 4))) AS dst_addr,
src_as,
dst_as,
etype,
proto,
src_port,
dst_port,
bytes,
packets        
FROM nflow.flows_kafka;


2. Установка сборщика флоу на хост

Используем host-sflow

cat /etc/hsflowd.conf
sflow {
  collector { ip=goflow2.host.example.com udpport=6343 }
   
  # ====== Local configuration ======
  pcap { dev = eth0 }
  pcap { dev = eth1 }
  # ...
}
 
systemctl enable hsflowd
systemctl start hsflowd 


3. Примеры запросов

Активные сборщики флоу

select sampler_address,count() from nflow.flows_raw where datetime>now()-24*3600 group by sampler_address limit 100;

Найти источник запросов на список внешних ресурсов

select src_addr,count() from nflow.flows_raw where datetime>now()-24*3600 and dst_addr in ('1.1.1.1','8.8.8.8') group by src_addr order by count() desc limit 100; 

вторник, 30 мая 2023 г.

Centos 7 SSH error "shell request failed on channel 0"

Столкнулся с невозможностью подключиться по ssh к нодам k8s под определённым юзером:

ssh user@10.0.0.10
shell request failed on channel 0

Выяснилось, что UID пользователя user был использован в docker image одного из сервисов.

Быстрое решение увеличить лимиты числа процессов для рядовых пользователей в Centos 7, например, на 8192:

/etc/security/limits.d/20-nproc.conf

# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
*          soft    nproc     4096
root       soft    nproc     unlimited

среда, 24 мая 2023 г.

Proxmox ZFS howto find Linked Clone disks

id 200 - proxmox template

id 201 - VM with Linked Clone disk

zfs list -o name,origin
...
rpool/data/vm-201-disk-0 rpool/data/base-200-disk-0@__base__

вторник, 23 мая 2023 г.

NetworkManager vlan on bond interface

nmcli con add type bond con-name bond0 ifname bond0

nmcli con modify bond0 bond.options "mode=802.3ad,xmit_hash_policy=layer2+3,miimon=100,lacp_rate=1"

nmcli con add type ethernet slave-type bond con-name bond0-eno1 ifname "eno1" master bond0

nmcli con add type ethernet slave-type bond con-name bond0-eno2 ifname "eno2" master bond0

nmcli con mod bond0 ipv4.method disabled

nmcli con mod bond0 ipv6.method ignore


nmcli con add type vlan con-name bond0.2222 ifname bond0.2222 dev bond0 id 2222

nmcli con mod bond0.2222 ipv4.addresses '10.0.0.5/24'

nmcli con mod bond0.2222 ipv4.gateway '10.0.0.1'

nmcli con mod bond0.2222 ipv4.dns '8.8.8.8,8.8.4.4'

nmcli con mod bond0.2222 ipv4.method manual 

понедельник, 15 мая 2023 г.

haproxy slowstart backend

Столкнулся с ошибкой приложения при работе с БД в схеме Percona xtradb cluster + Haproxy при рестарте одной из нод кластера

app.CRITICAL: An exception occurred while executing a query: SQLSTATE[08S01]: Communication link failure: 1047 WSREP has not yet prepared node for application use

backend bk_mysql
    mode tcp
    option mysql-check user haproxy
    default-server slowstart 30s weight 100
    server mysql-1 10.0.0.11:3306 check
    server mysql-2 10.0.0.12:3306 check
    ...

haproxy после перевода бэкенда в UP за указанный промежуток времени линейно поднимет его вес  с 0 до 100%, что значительно снизит число ошибок до перехода ноды в wsrep_ready ON.

haproxy tcp acl example

RTFM: https://www.haproxy.com/blog/use-haproxy-response-policies-to-stop-threats/#reject

frontend xxx_ft
        bind 10.0.0.10:29000
        mode tcp
        acl whitelist src 10.0.0.0/24
        tcp-request connection reject if !whitelist
        use_backend xxx_bk
backend xxx_bk
        mode tcp
        server ctcmedia 10.0.0.20:9000