ELK Stack on .NET

Murat Aslan
2 min readMar 14, 2023

--

ELK stack is a popular open-source solution used to collect, store, and analyze log data from various sources. It consists of Elasticsearch, Logstash, and Kibana. In this article, we will discuss how to use the ELK stack with a .NET application.

Installing the ELK Stack

The first step is to install the ELK stack. You can download Elasticsearch, Logstash, and Kibana from the official website. Once you have downloaded and installed these components, you need to configure them to work together.

Configuring Elasticsearch

Elasticsearch is a distributed, RESTful search and analytics engine. It is used to store and index log data. To configure Elasticsearch, you need to modify the elasticsearch.yml configuration file.

http.host: 0.0.0.0
transport.host: localhost

In this example, we are configuring Elasticsearch to listen on all network interfaces and using localhost as the transport host.

Configuring Logstash

Logstash is a data processing pipeline that ingests, processes, and outputs data. It is used to collect log data from various sources and send it to Elasticsearch. To configure Logstash, you need to create a configuration file that specifies the input, filter, and output plugins.

input {
tcp {
port => 5044
type => "logs"
ssl_enable => true
ssl_cert => "/etc/logstash/certs/server.crt"
ssl_key => "/etc/logstash/certs/server.key"
}
}

filter {
if [type] == "logs" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
}

output {
elasticsearch {
hosts => ["localhost:9200"]
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
ssl => true
cacert => "/etc/logstash/certs/ca.crt"
}
}

In this example, we are configuring Logstash to listen on port 5044 for log data over TCP with SSL enabled. We are also using the grok filter to parse the log data and the date filter to extract the timestamp. Finally, we are sending the log data to Elasticsearch.

Configuring Kibana

Kibana is a data visualization and exploration tool. It is used to visualize the log data stored in Elasticsearch. To configure Kibana, you need to modify the kibana.yml configuration file.

server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

In this example, we are configuring Kibana to listen on all network interfaces and use localhost as the Elasticsearch host.

Integrating the ELK Stack with a .NET Application

To integrate the ELK stack with a .NET application, you need to configure the logging framework to send log data to Logstash. In this example, we will use the Serilog logging framework.

Installing Serilog

You can install the Serilog NuGet package using the following command in the Package Manager Console:

Install-Package Serilog

Configuring Serilog

To configure Serilog, you need to create a logger object and specify the Logstash sink.

using Serilog;
using Serilog.Sinks.Logstash;

// Configure Serilog
var logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Logstash

--

--