Neural net untuk pemantauan server


11

Saya melihat pybrain untuk mengambil alarm monitor server dan menentukan akar penyebab masalah. Saya senang melatihnya menggunakan pembelajaran terawasi dan menyusun set data pelatihan. Data terstruktur seperti ini:

  • Server Tipe A # 1
    • Jenis alarm 1
    • Jenis alarm 2
  • Server Type A # 2
    • Jenis alarm 1
    • Jenis alarm 2
  • Server Type B # 1
    • Jenis alarm 99
    • Jenis alarm 2

Jadi ada n server, dengan x alarm yang bisa UPatau DOWN. Keduanya ndan xvariabel.

Jika Server A1 memiliki alarm 1 & 2 sebagai DOWN, maka kita dapat mengatakan bahwa layanan a turun di server itu dan merupakan penyebab masalah.

Jika alarm 1 tidak aktif di semua server, maka kita dapat mengatakan bahwa layanan a adalah penyebabnya.

Mungkin ada beberapa opsi untuk penyebabnya, jadi klasifikasi langsung sepertinya tidak tepat.

Saya juga ingin mengikat sumber data nanti ke internet. Seperti hanya skrip yang melakukan ping beberapa layanan eksternal.

Semua alarm yang tepat mungkin tidak terpicu sekaligus, karena pemeriksaan layanan serial, sehingga dapat mulai dengan satu server turun dan kemudian server lain turun 5 menit kemudian.

Saya mencoba melakukan beberapa hal dasar pada awalnya:

from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer


INPUTS = 2
OUTPUTS = 1

# Build network

# 2 inputs, 3 hidden, 1 output neurons
net = buildNetwork(INPUTS, 3, OUTPUTS)


# Build dataset

# Dataset with 2 inputs and 1 output
ds = SupervisedDataSet(INPUTS, OUTPUTS)


# Add one sample, iterable of inputs and iterable of outputs
ds.addSample((0, 0), (0,))



# Train the network with the dataset
trainer = BackpropTrainer(net, ds)

# Train 1000 epochs
for x in xrange(10):
    trainer.train()

# Train infinite epochs until the error rate is low
trainer.trainUntilConvergence()


# Run an input over the network
result = net.activate([2, 1])

Tetapi saya mengalami kesulitan memetakan sejumlah variabel alarm ke jumlah input statis. Misalnya, jika kita menambahkan alarm ke server, atau menambahkan server, seluruh jaringan perlu dibangun kembali. Jika itu adalah sesuatu yang perlu dilakukan, saya bisa melakukannya, tetapi ingin tahu apakah ada cara yang lebih baik.

Pilihan lain yang saya coba pikirkan adalah memiliki jaring yang berbeda untuk setiap jenis server, tetapi saya tidak melihat bagaimana saya bisa menarik kesimpulan yang luas, karena hanya akan melakukan evaluasi pada satu host, bukan semua host sekaligus.

Jenis algoritma apa yang harus saya gunakan dan bagaimana cara memetakan dataset untuk menarik kesimpulan seluruh lingkungan dengan input variabel?


Mengapa metode klasifikasi lainnya tidak sesuai di sini? Kedengarannya Anda prihatin dengan banyak kasus yang mengarah ke serangkaian output yang berkurang. Tapi ini pada dasarnya setiap kasus pembelajaran representasi dalam klasifikasi. Jaring saraf akan membantu Anda memilah efek interaksi apa yang dapat diprediksi ketika fitur dasar tidak terlalu prediktif. Kalau tidak, Anda bisa menggunakan metode lain.
cwharland

Saya menyambut solusi apa pun. Neural net adalah satu-satunya yang saya coba manfaatkan.
Matt Williamson

Masalah menarik. Karena Anda memposting ini lebih dari 6 bulan yang lalu, bisakah saya membuat Anda mengonfirmasi bahwa Anda masih tertarik dengan ini sebelum saya menghabiskan waktu untuk menusuknya?
Hack-R

Pikiran awal saya adalah menggunakan hutan acak dari regresi logistik pada model per-server. Kemudian Anda memiliki tolok ukur dan Anda akan mengetahui dengan cepat jika jaring saraf akan memberi Anda lebih banyak. Jaring saraf tidak selalu memberikan hasil terbaik.
user1269942

Jawaban:


2

Menurut pendapat saya Anda sedang mencari metode yang salah untuk menyelesaikan masalah Anda.

Anda tidak memiliki data numerik.

Pembelajaran mesin berbasis statistik memiliki waktu yang sangat sulit dengan masalah seperti itu. Masalah Anda terdengar lebih seperti salah satu masalah yang harus diselesaikan dengan sistem berbasis aturan. Naluri pertama saya adalah mencoba memahami aturan dan memasukkannya ke dalam kode yang mengarah ke klasifikasi.

Namun ada metode untuk mempelajari sistem berbasis aturan tersebut berdasarkan logika. Mereka hanya cukup ketinggalan zaman untuk pembelajaran mesin hari ini. https://en.wikipedia.org/wiki/Rule-based_system


+1, Jika Anda dapat dengan mudah memetakan jika / kemudian untuk mengatasi masalah tidak ada cara bahwa JST akan mengungguli logika inferensial murni. Bahkan argumen statistik (layanan A turun pada server 5/6, sehingga layanan A turun) lebih baik daripada berurusan dengan overhead yang dibutuhkan oleh Neural Net.
Derek Janni

2

Sejalan dengan komentar di atas, saya sarankan Anda mencoba pendekatan berbasis aturan. Untuk setiap server yang Anda miliki, permintaan layanannya. Jika semua layanan di server, maka Anda memiliki masalah server. Untuk setiap layanan, jika tidak ada server melaporkan bahwa layanan sedang berjalan, maka Anda memiliki masalah dengan layanan. Dalam hal keduanya, Anda akan mendapatkan pemberitahuan untuk masing-masing dan kemudian dapat memeriksa apa yang terjadi dengan salah satu dari konstituen.

Biaya, pemeliharaan, dan risiko hasil buruk menggunakan model JST semuanya melebihi solusi sederhana, berdasarkan aturan dan bos Anda mungkin akan menepuk punggung Anda hanya karena melakukan apa yang masuk akal di sini.

Jika Anda benar-benar serius menjaga server dan proses Anda berfungsi, saya sarankan Anda berinvestasi dalam layanan APM yang memberi Anda notifikasi real-time yang andal tentang apa yang terjadi di lingkungan produksi Anda.

Jika Anda hanya mencoba mempelajari cara kerja ANN - coba masalah lain. Dataset apa pun yang terkenal untuk klasifikasi atau pendeteksian anomali akan memberi Anda lebih banyak wawasan tentang cara kerja JST daripada dataset khusus, yang bisa sangat sulit dipaksakan ke dalam skema pembelajaran yang efektif.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.