Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Butiran, teknik dan amalan terbaik untuk melaksanakan pengumpulan dan analisis log yang diedarkan dengan Golang dan RabbitMQ

Butiran, teknik dan amalan terbaik untuk melaksanakan pengumpulan dan analisis log yang diedarkan dengan Golang dan RabbitMQ

PHPz
PHPzasal
2023-09-27 12:31:52556semak imbas

Butiran, teknik dan amalan terbaik untuk melaksanakan pengumpulan dan analisis log yang diedarkan dengan Golang dan RabbitMQ

Golang dan RabbitMQ melaksanakan pengumpulan log dan butiran analisis, teknik dan amalan terbaik
Dalam beberapa tahun kebelakangan ini, dengan populariti seni bina perkhidmatan mikro dan Sebagai berskala besar sistem menjadi lebih kompleks, pengumpulan dan analisis log menjadi semakin penting. Dalam sistem yang diedarkan, log setiap perkhidmatan mikro sering bertaburan di tempat yang berbeza Cara mengumpul dan menganalisis log ini dengan cekap menjadi satu cabaran. Artikel ini akan memperkenalkan butiran, teknik dan amalan terbaik tentang cara menggunakan Golang dan RabbitMQ untuk melaksanakan pengumpulan dan analisis log teragih.

RabbitMQ ialah perisian tengah pemesejan popular yang menyediakan mekanisme pemesejan yang fleksibel dan sesuai untuk pelbagai senario yang diedarkan. Golang ialah bahasa pengaturcaraan yang cekap dengan prestasi konkurensi yang baik dan penggunaan mudah, menjadikannya sangat sesuai untuk melaksanakan sistem dipacu mesej.

Pertama sekali, kita perlu menambah fungsi pengelogan pada setiap perkhidmatan mikro. Golang mempunyai banyak perpustakaan pembalakan yang sangat baik untuk dipilih, seperti logrus, zap, dsb. Kita boleh memilih perpustakaan pengelogan yang sesuai dalam setiap perkhidmatan mikro dan menggunakannya di mana pengelogan diperlukan. Sebagai contoh, kita boleh menggunakan perpustakaan logrus untuk merekodkan log tahap maklumat melalui logrus.Info("This is a log message"). logrus.Info("This is a log message")来记录一个信息级别的日志。

然后,我们需要将这些日志发送到RabbitMQ中。为此,我们可以使用RabbitMQ的Golang客户端库,如streadway/amqp。首先,我们需要建立与RabbitMQ的连接,并创建一个消息队列。

func main() {
    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    channel, err := conn.Channel()
    if err != nil {
        log.Fatal(err)
    }
    defer channel.Close()

    queue, err := channel.QueueDeclare(
        "logs", // 队列名
        true,   // 是否持久化
        false,  // 是否自动删除
        false,  // 是否排他性
        false,  // 是否为阻塞模式
        nil,    // 额外的属性
    )
    if err != nil {
        log.Fatal(err)
    }

    // 将日志发送到队列中
    logrus.SetOutput(channel)
    logrus.Info("This is a log message")
}

上述代码中,我们首先建立与RabbitMQ的连接,然后创建一个通道。接着,我们使用QueueDeclare方法创建一个名为"logs"的队列。最后,我们使用SetOutput方法将日志输出到RabbitMQ的通道中。

为了实现分布式日志收集,我们需要在另一个独立的进程中消费队列中的日志。这个进程可以在一个单独的机器上运行,或者与其他微服务运行在同一台机器上。我们可以使用同样的Golang客户端库来消费队列中的消息。

func main() {
    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    channel, err := conn.Channel()
    if err != nil {
        log.Fatal(err)
    }
    defer channel.Close()

    queue, err := channel.QueueDeclare(
        "logs", // 队列名
        true,   // 是否持久化
        false,  // 是否自动删除
        false,  // 是否排他性
        false,  // 是否为阻塞模式
        nil,    // 额外的属性
    )
    if err != nil {
        log.Fatal(err)
    }

    msgs, err := channel.Consume(
        queue.Name, // 队列名
        "",         // 消费者名
        true,       // 是否自动确认
        false,      // 是否非独占性
        false,      // 是否阻塞模式
        false,      // 是否等待
        nil,        // 额外参数
    )
    if err != nil {
        log.Fatal(err)
    }

    done := make(chan bool)

    go func() {
        for msg := range msgs {
            log.Println(string(msg.Body))
        }
    }()

    log.Println("Waiting for logs. To exit, press CTRL+C")
    <-done
}

上述代码中,我们首先建立与RabbitMQ的连接,然后创建一个通道。接着,我们使用QueueDeclare方法创建一个名为"logs"的队列。然后,我们使用Consume

Kemudian, kita perlu menghantar log ini kepada RabbitMQ. Untuk ini, kita boleh menggunakan perpustakaan pelanggan Golang RabbitMQ seperti strideway/amqp. Pertama, kita perlu mewujudkan sambungan ke RabbitMQ dan membuat baris gilir mesej.

rrreee

Dalam kod di atas, kami mula-mula mewujudkan sambungan dengan RabbitMQ dan kemudian mencipta saluran. Seterusnya, kami menggunakan kaedah QueueDeclare untuk membuat baris gilir bernama "log". Akhir sekali, kami menggunakan kaedah SetOutput untuk mengeluarkan log ke saluran RabbitMQ.

Untuk melaksanakan pengumpulan log yang diedarkan, kita perlu menggunakan log dalam baris gilir dalam proses bebas yang lain. Proses ini boleh dijalankan pada mesin yang berasingan atau pada mesin yang sama seperti perkhidmatan mikro lain. Kami boleh menggunakan pustaka pelanggan Golang yang sama untuk menggunakan mesej daripada baris gilir.

rrreee

Dalam kod di atas, kami mula-mula mewujudkan sambungan dengan RabbitMQ dan kemudian mencipta saluran. Seterusnya, kami menggunakan kaedah QueueDeclare untuk membuat baris gilir bernama "log". Kemudian, kami menggunakan mesej daripada baris gilir menggunakan kaedah Consume. Akhir sekali, kami menggunakan fungsi tanpa nama untuk mencetak mesej ini dalam goroutine yang berasingan. #🎜🎜##🎜🎜#Pada ketika ini, kami telah menyelesaikan pelaksanaan pengumpulan log yang diedarkan. Setiap kali perkhidmatan mikro merekodkan log, ia akan dihantar ke baris gilir RabbitMQ dan proses pengguna akan mengambilnya daripada baris gilir dan mencetak log ini. #🎜🎜##🎜🎜#Sudah tentu, sistem pengumpulan dan analisis log teragih sebenar biasanya memerlukan lebih banyak fungsi, seperti penyimpanan log berterusan, penapisan dan carian log, pemantauan log masa nyata, dsb. Keupayaan ini boleh dicapai melalui penggunaan repositori dan alatan yang sesuai. Sebagai contoh, kita boleh menggunakan Elasticsearch sebagai penyimpanan berterusan dan enjin carian log, dan menggunakan Kibana sebagai alat visualisasi dan pemantauan log. #🎜🎜##🎜🎜#Ringkasnya, menggunakan Golang dan RabbitMQ boleh melaksanakan pengumpulan dan analisis log yang diedarkan dengan mudah. Melalui reka bentuk dan pelaksanaan yang munasabah, kami boleh membina sistem log teragih yang stabil dan cekap. Dalam penggunaan sebenar, kami juga harus melakukan penalaan prestasi dan penggunaan berbilang mesin berdasarkan keperluan perniagaan khusus dan skala sistem untuk memastikan kestabilan dan kebolehpercayaan sistem. #🎜🎜#

Atas ialah kandungan terperinci Butiran, teknik dan amalan terbaik untuk melaksanakan pengumpulan dan analisis log yang diedarkan dengan Golang dan RabbitMQ. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn