One place for hosting & domains

      Elastic

      How to Deploy the Elastic Stack on Kubernetes


      Updated by Linode Written by Tyler Langlois

      What is the Elastic Stack?

      The Elastic Stack is a collection of open source projects from Elastic that help collect and visualize a wide variety of data sources. Elasticsearch can store and aggregate data such as log files, container metrics, and more. The products in the stack include: Elasticsearch, Logstash, Kibana, and now Beats.

      This guide provides instructions to:

      You can further use the Elastic Stack deployed and configured for application logs or monitoring Kubernetes.

      Caution

      This guide’s example instructions creates the following billable resources on the Linode account: four (4) Linodes and three (3) Block Storage volumes. If you do not want to keep using the example cluster that you create, be sure to delete the cluster Linodes and volumes after you have finished the guide.

      If you remove the resources afterward, you are billed only for the hour(s) that the resources were present on the account. For more information, see Billing and Payments guide about how hourly billing works and for a table of plan pricing.

      Before You Begin

      Note

      This guide uses Kubernetes services which are private by default. Local listeners are opened which allow you to access the services on the local browser, however, web servers and NodeBalancers are out scope for this guide. Due to this, you should complete the steps of this guide from the local computer or from a computer that gives you access to the web browser. If you want to access these services from a public domain, please see the Getting Started with NodeBalancers guide.
      1. Install the Kubernetes CLI (kubectl) on the local computer.

      2. Follow the instructions in Deploying and Managing a Cluster with Linode Kubernetes Engine Tutorial to create and connect to an LKE cluster.

        Note

        Ensure that the LKE cluster that you create has three nodes and one master node with 4GB Linode instances. Also ensure that the KUBECONFIG context is persistent
      3. You should also make sure that Kubernetes CLI is using the right cluster context. Run the get-contexts subcommand to check:

        kubectl config get-contexts
        
      4. Set up Helm in the Kubernetes cluster by following the Install Helm section in the How to Install Apps on Kubernetes with Helm 3 guide.

      Configure Helm

      You should now have a Kubernetes cluster with Helm installed and configured.

      1. Add the elastic chart repository to the local installation of Helm:

        helm repo add elastic https://helm.elastic.co
        
      2. Fetch the updated list of charts from all configured chart repositories:

        helm repo update
        
      3. Search for the official elasticsearch chart to confirm Helm has been configured correctly. Note that this chart released by Elastic differs from the chart bundled with the default installation of Helm.

        helm search hub elasticsearch
        

        This command returns all the charts available for elasticsearch in the hub. Select the one listed below. The exact version numbers may be different; at the time of writing this guide the version is 7.8.0.

          
        NAME                                              CHART VERSION   APP VERSION   DESCRIPTION
        https://hub.helm.sh/charts/elastic/elasticsearch  7.8.0        	  7.8.0      	Official Elastic helm chart for Elasticsearch
        
        

        The Helm environment is now ready to install official Elasticsearch charts to the Kubernetes cluster.

      Install Charts

      Install Elasticsearch

      Before installing the chart, ensure that resources are set appropriately. By default, the elasticsearch chart allocates 1GB of memory to the JVM heap and sets Kubernetes resource requests and limits to 2GB. Using a Linode 4GB instance is compatible with these defaults, but if you are using a different instance type, you need to provide different values to the chart at install time in order to ensure that running Pods are within the resource constraints of the node sizes you have chosen.

      1. Install the elasticsearch chart:

        helm install elasticsearch elastic/elasticsearch
        

        An output similar to the following appears:

          
            LAST DEPLOYED: Tue Jul  7 14:46:52 2020
            NAMESPACE: default
            STATUS: deployed
            REVISION: 1
            NOTES:
            1. Watch all cluster members come up.
               $ kubectl get pods --namespace=default -l app=elasticsearch-master -w
            2. Test cluster health using Helm test.
              $ helm test elasticsearch --cleanup
            
        
      2. A three-node Elasticsearch cluster is now configured and available locally to the Kubernetes cluster. To confirm this, first port-forward a local port to the Elasticsearch service. Leave this command running in a terminal window or tab in the background for the remainder of this tutorial.

        kubectl port-forward svc/elasticsearch-master 9200:9200
        

        Note

        This command times out after 5 minutes, if you find that and want to have the port forward for longer, consider using the following command to keep it open: while true; do kubectl port-forward svc/elasticsearch-master 9200:9200; done

      3. In another terminal window, send a request to this port:

        curl http://localhost:9200/
        

        An output similar to the following appears:

          
        {
          "name" : "elasticsearch-master-1",
          "cluster_name" : "elasticsearch",
          "cluster_uuid" : "2eKh30v2Q1ybT9HTPqQw9w",
          "version" : {
            "number" : "7.8.0",
            "build_flavor" : "default",
            "build_type" : "docker",
            "build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
            "build_date" : "2020-06-14T19:35:50.234439Z",
            "build_snapshot" : false,
            "lucene_version" : "8.5.1",
            "minimum_wire_compatibility_version" : "6.8.0",
            "minimum_index_compatibility_version" : "6.0.0-beta1"
          },
          "tagline" : "You Know, for Search"
        }
        
        

        Note

        The specific version numbers and dates may be different in this JSON response. Elasticsearch is operational, but not receiving or serving any data.

      Install Filebeat

      In order to start processing data, deploy the filebeat chart to the Kubernetes cluster. This collects all Pod logs and stores them in Elasticsearch, after which they can be searched and used in visualizations within Kibana.

      1. Deploy the filebeat chart. No custom values.yaml file should be necessary:

        helm install filebeat elastic/filebeat
        

        An output similar to the following appears:

          
        NAME: filebeat
        LAST DEPLOYED: Tue Jul  7 15:33:52 2020
        NAMESPACE: default
        STATUS: deployed
        REVISION: 1
        TEST SUITE: None
        NOTES:
        1. Watch all containers come up.
           $ kubectl get pods --namespace=default -l app=filebeat-filebeat -w
        
        
      2. Confirm that Filebeat has started to index documents into Elasticsearch by sending a request to the locally-forwarded Elasticsearch service port in a different terminal:

        curl http://localhost:9200/_cat/indices
        

        At least one filebeat index should be present, and output should be similar to the following:

          
        green open filebeat-7.8.0-2020.07.07-000001 6CYTk-UWQSeG7Y5-XjbQww 1 1 16975 0 10mb 5.8mb
            
        

      Install Kibana

      Kibana provides a frontend to Elasticsearch and the data collected by Filebeat.

      1. Deploy the kibana chart:

        helm install kibana elastic/kibana
        

        An output similar to the following appears:

          
        NAME: kibana
        LAST DEPLOYED: Tue Jul  7 15:40:21 2020
        NAMESPACE: default
        STATUS: deployed
        REVISION: 1
        TEST SUITE: None
        
        
      2. Port-forward the kibana-kibana service in order to access Kibana locally. Leave this command running in the background as well for the remainder of this tutorial.

        kubectl port-forward svc/kibana-kibana 5601:5601
        

        Note

        This command times out after 5 minutes, if you find that and want to have the port forward for longer, consider using the following command to keep it open: while true; do kubectl port-forward svc/kibana-kibana 5601:5601; done

      Configure Kibana

      Before visualizing Pod logs, Kibana must be configured with an index pattern for Filebeat’s indices.

      1. With the previous port-forward command running in another terminal window, open a browser and navigate to http://localhost:5601

      2. A welcome page similar to the following appears in the browser. Click the Explore on my own button.

        Kibana Welcome Page

      3. Open the menu, then go to Stack Management > Kibana > Index Patterns to create a new index pattern. The Index patterns page appears.

      4. Click the Create index pattern button to begin.

        Kibana Index Patterns Page

      5. In the Define index pattern window, type filebeat-* in the Index pattern text box and click the Next step button.

        Kibana Create Index Pattern

      6. In the Configure settings window, select @timestamp from the Time Filter field name dropdown menu and click the Create index pattern button.

        Kibana Create Index Pattern

      7. A page with the index pattern details appears. Open the menu, then go to Kibana > Discover to view incoming logs.

        Kibana Select Discover

      8. The Discover page provides a realtime view of logs as they are ingested by Elasticsearch from the Kubernetes cluster. The histogram provides a view of log volume over time, which by default, spans the last 15 minutes. The sidebar on the left side of the user interface displays various fields parsed from JSON fields sent by Filebeat to Elasticsearch.

      9. Use the Filters box to search only for logs arriving from Kibana Pods by filtering for kubernetes.container.name : "kibana". Click the Update button to apply the search filter.

        Note

        When searching in the filters box, field names and values are auto-populated.

        Kibana Filter

      10. In order to expand a log event, click the arrow next to an event in the user interface.

        Kibana Open Log Event

      11. Scroll down to view the entire log document in Kibana. Observe the fields provided by Filebeat, including the message field, which contains standard out and standard error messages from the container, as well as the Kubernetes node and Pod name in fields prefixed with kubernetes.

        Kibana Log Document

      12. Look closely at the message field in the log representation and note that the text field is formatted as JSON. While the terms in this field can be searched with free text search terms in Kibana, parsing the field generally yields better results.

      Metricbeat

      In addition to collecting logs with Filebeat, Metricbeat can collect Pod and node metrics in order to visualize information such as resource utilization.

      Install Metricbeat

      1. Deploy the metricbeat chart.

        helm install metricbeat elastic/metricbeat
        

        An output similar to the following appears:

          
        NAME: metricbeat
        LAST DEPLOYED: Tue Jul  7 18:43:58 2020
        NAMESPACE: default
        STATUS: deployed
        REVISION: 1
        TEST SUITE: None
        NOTES:
        1. Watch all containers come up.
           $ kubectl get pods --namespace=default -l app=metricbeat-metricbeat -w
        
        
      2. Confirm that Metricbeat has started to index documents into Elasticsearch by sending a request to the locally-forwarded Elasticsearch service port:

        curl http://localhost:9200/_cat/indices
        

        At least one metricbeat index should be present, similar to the following:

          
        green open metricbeat-7.8.0-2020.07.07-000001 wAWu5op1SJqlbaXKOj_tSg 1 1  1214 0   3.5mb   1.7mb
        
        

      Load Dashboards

      Metricbeat can install default Dashboards into Kibana to provide out-of-the-box visualizations for data collected by Kubernetes.

      Before following these steps, ensure that the port-forward command to expose Kibana over port 5601 locally is still running.

      Run the following commands on the local machine. This communicates with Kibana over 127.0.0.1:5601 to import default Dashboards that is populated with data from Metricbeat.

      Note

      The commands should use the same version of Metricbeat deployed to the Kubernetes cluster. You can find this version by issuing the following command:

      helm get values --all metricbeat | grep imageTag
      

      For Linux

      1. Get the Metricbeat package.

        wget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.8.0-linux-x86_64.tar.gz
        
      2. Unzip the package.

        tar xvzf metricbeat-7.8.0-linux-x86_64.tar.gz
        
      3. Navigate to the directory.

        cd metricbeat-7.8.0-linux-x86_64
        
      4. Setup the dashboards.

        ./metricbeat setup --dashboards
        

      For MacOS

      1. Get the Metricbeat package.

        curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.8.0-darwin-x86_64.tar.gz
        
      2. Unzip the package.

        tar xzvf metricbeat-7.8.0-darwin-x86_64.tar.gz
        
      3. Navigate to the directory.

        cd metricbeat-7.8.0-darwin-x86_64
        
      4. Setup the dashboards.

        ./metricbeat setup --dashboards
        

      Explore Dashboards

      1. Open a browser window to http://localhost:5601 and click the Dashboards in the left sidebar.

        Kibana Dashboards Link

      2. In the search box, enter “kubernetes” and press Enter. Select the [Metricbeat Kubernetes] Overview ECS dashboard.

        Kibana Kubernetes Dashboards

      3. The following dashboard displays several types of metrics about the Kubernetes cluster.

        Kibana Kubernetes Dashboards

      4. You can explore the various visualizations on this page in order to view metrics about Pods, nodes, and the overall health of the Kubernetes cluster.

      Next Steps

      From this point onward, any additional workloads started in Kubernetes is processed by Filebeat and Metricbeat in order to collect logs and metrics for later introspection within Kibana. As Kubernetes nodes are added or removed, the Filebeat and Metricbeat DaemonSets automatically scale out Pods to monitor nodes as they join the Kubernetes cluster.

      More Information

      You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.

      This guide is published under a CC BY-ND 4.0 license.



      Source link

      How To Install Elasticsearch, Logstash, and Kibana (Elastic Stack) on Ubuntu 20.04


      Not using Ubuntu 20.04?


      Choose a different version or distribution.

      Introduction

      The Elastic Stack — formerly known as the ELK Stack — is a collection of open-source software produced by Elastic which allows you to search, analyze, and visualize logs generated from any source in any format, a practice known as centralized logging. Centralized logging can be useful when attempting to identify problems with your servers or applications as it allows you to search through all of your logs in a single place. It’s also useful because it allows you to identify issues that span multiple servers by correlating their logs during a specific time frame.

      The Elastic Stack has four main components:

      • Elasticsearch: a distributed RESTful search engine which stores all of the collected data.
      • Logstash: the data processing component of the Elastic Stack which sends incoming data to Elasticsearch.
      • Kibana: a web interface for searching and visualizing logs.
      • Beats: lightweight, single-purpose data shippers that can send data from hundreds or thousands of machines to either Logstash or Elasticsearch.

      In this tutorial, you will install the Elastic Stack on an Ubuntu 20.04 server. You will learn how to install all of the components of the Elastic Stack — including Filebeat, a Beat used for forwarding and centralizing logs and files — and configure them to gather and visualize system logs. Additionally, because Kibana is normally only available on the localhost, we will use Nginx to proxy it so it will be accessible over a web browser. We will install all of these components on a single server, which we will refer to as our Elastic Stack server.

      Note: When installing the Elastic Stack, you must use the same version across the entire stack. In this tutorial we will install the latest versions of the entire stack which are, at the time of this writing, Elasticsearch 7.7.1, Kibana 7.7.1, Logstash 7.7.1, and Filebeat 7.7.1.

      Prerequisites

      To complete this tutorial, you will need the following:

      Additionally, because the Elastic Stack is used to access valuable information about your server that you would not want unauthorized users to access, it’s important that you keep your server secure by installing a TLS/SSL certificate. This is optional but strongly encouraged.

      However, because you will ultimately make changes to your Nginx server block over the course of this guide, it would likely make more sense for you to complete the Let’s Encrypt on Ubuntu 20.04 guide at the end of this tutorial’s second step. With that in mind, if you plan to configure Let’s Encrypt on your server, you will need the following in place before doing so:

      Step 1 — Installing and Configuring Elasticsearch

      The Elasticsearch components are not available in Ubuntu’s default package repositories. They can, however, be installed with APT after adding Elastic’s package source list.

      All of the packages are signed with the Elasticsearch signing key in order to protect your system from package spoofing. Packages which have been authenticated using the key will be considered trusted by your package manager. In this step, you will import the Elasticsearch public GPG key and add the Elastic package source list in order to install Elasticsearch.

      To begin, use cURL, the command line tool for transferring data with URLs, to import the Elasticsearch public GPG key into APT. Note that we are using the arguments -fsSL to silence all progress and possible errors (except for a server failure) and to allow cURL to make a request on a new location if redirected. Pipe the output of the cURL command into the apt-key program, which adds the public GPG key to APT.

      • curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

      Next, add the Elastic source list to the sources.list.d directory, where APT will search for new sources:

      • echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

      Next, update your package lists so APT will read the new Elastic source:

      Then install Elasticsearch with this command:

      • sudo apt install elasticsearch

      Elasticsearch is now installed and ready to be configured. Use your preferred text editor to edit Elasticsearch’s main configuration file, elasticsearch.yml. Here, we’ll use nano:

      • sudo nano /etc/elasticsearch/elasticsearch.yml

      Note: Elasticsearch’s configuration file is in YAML format, which means that we need to maintain the indentation format. Be sure that you do not add any extra spaces as you edit this file.

      The elasticsearch.yml file provides configuration options for your cluster, node, paths, memory, network, discovery, and gateway. Most of these options are preconfigured in the file but you can change them according to your needs. For the purposes of our demonstration of a single-server configuration, we will only adjust the settings for the network host.

      Elasticsearch listens for traffic from everywhere on port 9200. You will want to restrict outside access to your Elasticsearch instance to prevent outsiders from reading your data or shutting down your Elasticsearch cluster through its REST API. To restrict access and therefore increase security, find the line that specifies network.host, uncomment it, and replace its value with localhost like this:

      /etc/elasticsearch/elasticsearch.yml

      . . .
      # ---------------------------------- Network -----------------------------------
      #
      # Set the bind address to a specific IP (IPv4 or IPv6):
      #
      network.host: localhost
      . . .
      

      We have specified localhost so that Elasticsearch listens on all interfaces and bound IPs. If you want it to listen only on a specific interface, you can specify its IP in place of localhost. Save and close elasticsearch.yml. If you’re using nano, you can do so by pressing CTRL+X, followed by Y and then ENTER .

      These are the minimum settings you can start with in order to use Elasticsearch. Now you can start Elasticsearch for the first time.

      Start the Elasticsearch service with systemctl. Give Elasticsearch a few moments to start up. Otherwise, you may get errors about not being able to connect.

      • sudo systemctl start elasticsearch

      Next, run the following command to enable Elasticsearch to start up every time your server boots:

      • sudo systemctl enable elasticsearch

      You can test whether your Elasticsearch service is running by sending an HTTP request:

      • curl -X GET "localhost:9200"

      You will see a response showing some basic information about your local node, similar to this:

      Output

      { "name" : "Elasticsearch", "cluster_name" : "elasticsearch", "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ", "version" : { "number" : "7.7.1", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.5.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }

      Now that Elasticsearch is up and running, let’s install Kibana, the next component of the Elastic Stack.

      Step 2 — Installing and Configuring the Kibana Dashboard

      According to the official documentation, you should install Kibana only after installing Elasticsearch. Installing in this order ensures that the components each product depends on are correctly in place.

      Because you’ve already added the Elastic package source in the previous step, you can just install the remaining components of the Elastic Stack using apt:

      Then enable and start the Kibana service:

      • sudo systemctl enable kibana
      • sudo systemctl start kibana

      Because Kibana is configured to only listen on localhost, we must set up a reverse proxy to allow external access to it. We will use Nginx for this purpose, which should already be installed on your server.

      First, use the openssl command to create an administrative Kibana user which you’ll use to access the Kibana web interface. As an example we will name this account kibanaadmin, but to ensure greater security we recommend that you choose a non-standard name for your user that would be difficult to guess.

      The following command will create the administrative Kibana user and password, and store them in the htpasswd.users file. You will configure Nginx to require this username and password and read this file momentarily:

      • echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

      Enter and confirm a password at the prompt. Remember or take note of this login, as you will need it to access the Kibana web interface.

      Next, we will create an Nginx server block file. As an example, we will refer to this file as your_domain, although you may find it helpful to give yours a more descriptive name. For instance, if you have a FQDN and DNS records set up for this server, you could name this file after your FQDN.

      Using nano or your preferred text editor, create the Nginx server block file:

      • sudo nano /etc/nginx/sites-available/your_domain

      Add the following code block into the file, being sure to update your_domain to match your server’s FQDN or public IP address. This code configures Nginx to direct your server’s HTTP traffic to the Kibana application, which is listening on localhost:5601. Additionally, it configures Nginx to read the htpasswd.users file and require basic authentication.

      Note that if you followed the prerequisite Nginx tutorial through to the end, you may have already created this file and populated it with some content. In that case, delete all the existing content in the file before adding the following:

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
      
          server_name your_domain;
      
          auth_basic "Restricted Access";
          auth_basic_user_file /etc/nginx/htpasswd.users;
      
          location / {
              proxy_pass http://localhost:5601;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection 'upgrade';
              proxy_set_header Host $host;
              proxy_cache_bypass $http_upgrade;
          }
      }
      

      When you’re finished, save and close the file.

      Next, enable the new configuration by creating a symbolic link to the sites-enabled directory. If you already created a server block file with the same name in the Nginx prerequisite, you do not need to run this command:

      • sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/your_domain

      Then check the configuration for syntax errors:

      If any errors are reported in your output, go back and double check that the content you placed in your configuration file was added correctly. Once you see syntax is ok in the output, go ahead and restart the Nginx service:

      • sudo systemctl reload nginx

      If you followed the initial server setup guide, you should have a UFW firewall enabled. To allow connections to Nginx, we can adjust the rules by typing:

      • sudo ufw allow 'Nginx Full'

      Note: If you followed the prerequisite Nginx tutorial, you may have created a UFW rule allowing the Nginx HTTP profile through the firewall. Because the Nginx Full profile allows both HTTP and HTTPS traffic through the firewall, you can safely delete the rule you created in the prerequisite tutorial. Do so with the following command:

      • sudo ufw delete allow 'Nginx HTTP'

      Kibana is now accessible via your FQDN or the public IP address of your Elastic Stack server. You can check the Kibana server’s status page by navigating to the following address and entering your login credentials when prompted:

      http://your_domain/status
      

      This status page displays information about the server’s resource usage and lists the installed plugins.

      |Kibana status page

      Note: As mentioned in the Prerequisites section, it is recommended that you enable SSL/TLS on your server. You can follow the Let’s Encrypt guide now to obtain a free SSL certificate for Nginx on Ubuntu 20.04. After obtaining your SSL/TLS certificates, you can come back and complete this tutorial.

      Now that the Kibana dashboard is configured, let’s install the next component: Logstash.

      Step 3 — Installing and Configuring Logstash

      Although it’s possible for Beats to send data directly to the Elasticsearch database, it is common to use Logstash to process the data. This will allow you more flexibility to collect data from different sources, transform it into a common format, and export it to another database.

      Install Logstash with this command:

      • sudo apt install logstash

      After installing Logstash, you can move on to configuring it. Logstash’s configuration files reside in the /etc/logstash/conf.d directory. For more information on the configuration syntax, you can check out the configuration reference that Elastic provides. As you configure the file, it’s helpful to think of Logstash as a pipeline which takes in data at one end, processes it in one way or another, and sends it out to its destination (in this case, the destination being Elasticsearch). A Logstash pipeline has two required elements, input and output, and one optional element, filter. The input plugins consume data from a source, the filter plugins process the data, and the output plugins write the data to a destination.

      Logstash pipeline

      Create a configuration file called 02-beats-input.conf where you will set up your Filebeat input:

      • sudo nano /etc/logstash/conf.d/02-beats-input.conf

      Insert the following input configuration. This specifies a beats input that will listen on TCP port 5044.

      /etc/logstash/conf.d/02-beats-input.conf

      input {
        beats {
          port => 5044
        }
      }
      

      Save and close the file.

      Next, create a configuration file called 30-elasticsearch-output.conf:

      • sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf

      Insert the following output configuration. Essentially, this output configures Logstash to store the Beats data in Elasticsearch, which is running at localhost:9200, in an index named after the Beat used. The Beat used in this tutorial is Filebeat:

      /etc/logstash/conf.d/30-elasticsearch-output.conf

      output {
        if [@metadata][pipeline] {
          elasticsearch {
          hosts => ["localhost:9200"]
          manage_template => false
          index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
          pipeline => "%{[@metadata][pipeline]}"
          }
        } else {
          elasticsearch {
          hosts => ["localhost:9200"]
          manage_template => false
          index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
          }
        }
      }
      
      
      

      Save and close the file.

      Test your Logstash configuration with this command:

      • sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

      If there are no syntax errors, your output will display Config Validation Result: OK. Exiting Logstash after a few seconds. If you don’t see this in your output, check for any errors noted in your output and update your configuration to correct them. Note that you will receive warnings from OpenJDK, but they should not cause any problems and can be ignored.

      If your configuration test is successful, start and enable Logstash to put the configuration changes into effect:

      • sudo systemctl start logstash
      • sudo systemctl enable logstash

      Now that Logstash is running correctly and is fully configured, let’s install Filebeat.

      Step 4 — Installing and Configuring Filebeat

      The Elastic Stack uses several lightweight data shippers called Beats to collect data from various sources and transport them to Logstash or Elasticsearch. Here are the Beats that are currently available from Elastic:

      • Filebeat: collects and ships log files.
      • Metricbeat: collects metrics from your systems and services.
      • Packetbeat: collects and analyzes network data.
      • Winlogbeat: collects Windows event logs.
      • Auditbeat: collects Linux audit framework data and monitors file integrity.
      • Heartbeat: monitors services for their availability with active probing.

      In this tutorial we will use Filebeat to forward local logs to our Elastic Stack.

      Install Filebeat using apt:

      • sudo apt install filebeat

      Next, configure Filebeat to connect to Logstash. Here, we will modify the example configuration file that comes with Filebeat.

      Open the Filebeat configuration file:

      • sudo nano /etc/filebeat/filebeat.yml

      Note: As with Elasticsearch, Filebeat’s configuration file is in YAML format. This means that proper indentation is crucial, so be sure to use the same number of spaces that are indicated in these instructions.

      Filebeat supports numerous outputs, but you’ll usually only send events directly to Elasticsearch or to Logstash for additional processing. In this tutorial, we’ll use Logstash to perform additional processing on the data collected by Filebeat. Filebeat will not need to send any data directly to Elasticsearch, so let’s disable that output. To do so, find the output.elasticsearch section and comment out the following lines by preceding them with a #:

      /etc/filebeat/filebeat.yml

      ...
      #output.elasticsearch:
        # Array of hosts to connect to.
        #hosts: ["localhost:9200"]
      ...
      

      Then, configure the output.logstash section. Uncomment the lines output.logstash: and hosts: ["localhost:5044"] by removing the #. This will configure Filebeat to connect to Logstash on your Elastic Stack server at port 5044, the port for which we specified a Logstash input earlier:

      /etc/filebeat/filebeat.yml

      output.logstash:
        # The Logstash hosts
        hosts: ["localhost:5044"]
      

      Save and close the file.

      The functionality of Filebeat can be extended with Filebeat modules. In this tutorial we will use the system module, which collects and parses logs created by the system logging service of common Linux distributions.

      Let’s enable it:

      • sudo filebeat modules enable system

      You can see a list of enabled and disabled modules by running:

      • sudo filebeat modules list

      You will see a list similar to the following:

      Output

      Enabled: system Disabled: apache2 auditd elasticsearch icinga iis kafka kibana logstash mongodb mysql nginx osquery postgresql redis traefik ...

      By default, Filebeat is configured to use default paths for the syslog and authorization logs. In the case of this tutorial, you do not need to change anything in the configuration. You can see the parameters of the module in the /etc/filebeat/modules.d/system.yml configuration file.

      Next, we need to set up the Filebeat ingest pipelines, which parse the log data before sending it through logstash to Elasticsearch. To load the ingest pipeline for the system module, enter the following command:

      • sudo filebeat setup --pipelines --modules system

      Next, load the index template into Elasticsearch. An Elasticsearch index is a collection of documents that have similar characteristics. Indexes are identified with a name, which is used to refer to the index when performing various operations within it. The index template will be automatically applied when a new index is created.

      To load the template, use the following command:

      • sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

      Output

      Index setup finished.

      Filebeat comes packaged with sample Kibana dashboards that allow you to visualize Filebeat data in Kibana. Before you can use the dashboards, you need to create the index pattern and load the dashboards into Kibana.

      As the dashboards load, Filebeat connects to Elasticsearch to check version information. To load dashboards when Logstash is enabled, you need to disable the Logstash output and enable Elasticsearch output:

      • sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

      You should receive output similar to this:

      Output

      Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling. Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead. See more: https://www.elastic.co/guide/en/elastic-stack-overview/current/xpack-ml.html Loaded machine learning job configurations Loaded Ingest pipelines

      Now you can start and enable Filebeat:

      • sudo systemctl start filebeat
      • sudo systemctl enable filebeat

      If you’ve set up your Elastic Stack correctly, Filebeat will begin shipping your syslog and authorization logs to Logstash, which will then load that data into Elasticsearch.

      To verify that Elasticsearch is indeed receiving this data, query the Filebeat index with this command:

      • curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

      You should receive output similar to this:

      Output

      ... { { "took" : 4, "timed_out" : false, "_shards" : { "total" : 2, "successful" : 2, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 4040, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "filebeat-7.7.1-2020.06.04", "_type" : "_doc", "_id" : "FiZLgXIB75I8Lxc9ewIH", "_score" : 1.0, "_source" : { "cloud" : { "provider" : "digitalocean", "instance" : { "id" : "194878454" }, "region" : "nyc1" }, "@timestamp" : "2020-06-04T21:45:03.995Z", "agent" : { "version" : "7.7.1", "type" : "filebeat", "ephemeral_id" : "cbcefb9a-8d15-4ce4-bad4-962a80371ec0", "hostname" : "june-ubuntu-20-04-elasticstack", "id" : "fbd5956f-12ab-4227-9782-f8f1a19b7f32" }, ...

      If your output shows 0 total hits, Elasticsearch is not loading any logs under the index you searched for, and you will need to review your setup for errors. If you received the expected output, continue to the next step, in which we will see how to navigate through some of Kibana’s dashboards.

      Step 5 — Exploring Kibana Dashboards

      Let’s return to the Kibana web interface that we installed earlier.

      In a web browser, go to the FQDN or public IP address of your Elastic Stack server. If your session has been interrupted, you will need to re-enter entering the credentials you defined in Step 2. Once you have logged in, you should receive the Kibana homepage:

      Kibana Homepage

      Click the Discover link in the left-hand navigation bar (you may have to click the the Expand icon at the very bottom left to see the navigation menu items). On the Discover page, select the predefined filebeat-* index pattern to see Filebeat data. By default, this will show you all of the log data over the last 15 minutes. You will see a histogram with log events, and some log messages below:

      Discover page

      Here, you can search and browse through your logs and also customize your dashboard. At this point, though, there won’t be much in there because you are only gathering syslogs from your Elastic Stack server.

      Use the left-hand panel to navigate to the Dashboard page and search for the Filebeat System dashboards. Once there, you can select the sample dashboards that come with Filebeat’s system module.

      For example, you can view detailed stats based on your syslog messages:

      Syslog Dashboard

      You can also view which users have used the sudo command and when:

      Sudo Dashboard

      Kibana has many other features, such as graphing and filtering, so feel free to explore.

      Conclusion

      In this tutorial, you’ve learned how to install and configure the Elastic Stack to collect and analyze system logs. Remember that you can send just about any type of log or indexed data to Logstash using Beats, but the data becomes even more useful if it is parsed and structured with a Logstash filter, as this transforms the data into a consistent format that can be read easily by Elasticsearch.



      Source link

      Установка Elasticsearch, Logstash и Kibana (комплекс Elastic) в Ubuntu 18.04


      Автор выбрал Internet Archive для получения пожертвования в рамках программы Write for DOnations.

      Введение

      Комплекс Elastic Stack (прежнее название — комплекс ELK) представляет собой набор программного обеспечения Elastic с открытым исходным кодом, обеспечивающий возможности поиска, анализа и визуализации журналов, сгенерированных любым источником в любом формате (централизованное ведение журнала). Централизованное ведение журнала очень полезно для выявления проблем с серверами или приложениями, поскольку обеспечивает возможности поиска всех журнальных записей в одном месте. Также данная возможность позволяет выявлять проблемы, распространяющиеся на несколько серверов, посредством сопоставления их журналов за определенный период времени.

      Комплекс Elastic Stack имеет четыре основных компонента:

      • Elasticsearch: распределенная поисковая система RESTful, которая сохраняет все собранные данные.
      • Logstash: элемент обработки данных комплекса Elastic, отправляющий входящие данные в Elasticsearch.
      • Kibana: веб-интерфейс для поиска и визуализации журналов.
      • Beats: компактные элементы переноса данных одиночного назначения, которые могут отправлять данные с сотен или тысяч компютеров в Logstash или Elasticsearch.

      В этом обучающем модуле вы научитесь устанавливать Elastic Stack на сервере Ubuntu 18.04. Вы научитесь устанавливать все компоненты Elastic Stack, в том числе Filebeat, инструмент для перенаправления и централизации журналов и файлов, а также настраивать эти компоненты для сбора и визуализации системных журналов. Кроме того, поскольку компонент Kibana обычно доступен только через localhost, мы будем использовать Nginx в качестве прокси для обеспечения доступа через браузер. Мы установим все эти компоненты на одном сервере, который будем называть нашим сервером Elastic Stack.

      Примечание. При установке Elastic Stack необходимо использовать одну и ту же версию для всего комплекса. В этом обучающем модуле мы установим последние версии компонентов комплекса. На момент написания это Elasticsearch 6.4.3, Kibana 6.4.3, Logstash 6.4.3 и Filebeat 6.4.3.

      Предварительные требования

      Для этого обучающего модуля вам потребуется следующее:

      • Сервер Ubuntu 18.04, настроенный в соответствии с указаниями обучающего модуля «Начальная настройка сервера для Ubuntu 18.04», включая пользователя без привилегий root с привилегиями sudo и настроенный брандмауэр ufw. Требования сервера комплекса Elastic к ресурсам процессора, оперативной памяти и хранения данных зависят от объема журналов, который вы планируете собирать. В этом обучающем модуле мы будем использовать для нашего комплекса Elastic сервер VPS со следующими спецификациями:

        • ОС: Ubuntu 18.04
        • ОЗУ: 4 ГБ
        • ЦП: 2
      • На сервере должно быть установлено программное обеспечение Java 8, которое требуется для Elasticsearch и Logstash. Обратите внимание, что версия Java 9 не поддерживается. Для установки следуйте указаниям раздела «Установка Oracle JDK» нашего руководства по установке Java 8 в Ubuntu 18.04.

      • На сервере должен быть установлен Nginx, который мы позднее настроим как обратный прокси для Kibana. Для настройки следуйте указаниям нашего обучающего модуля «Установка Nginx в Ubuntu 18.04».

      Кроме того, поскольку комплекс Elastic используется для доступа ценной информации о вашем сервере, которую вам нужно защищать, очень важно обеспечить защиту сервера сертификатом TLS/SSL. Это необязательно, но настоятельно рекомендуется.

      Однако поскольку вы будете вносить изменения в серверный блок Nginx в ходе выполнения этого обучающего модуля, разумнее всего будет пройти обучающий модуль «Let’s Encrypt в Ubuntu 18.04» после прохождения второго шага настоящего обучающего модуля. Если вы планируете настроить на сервере Let’s Encrypt, вам потребуется следующее:

      • Полностью квалифицированное доменное имя (FQDN). В этом обучающем модуле мы будем использовать имя example.com. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или воспользоваться услугами любого предпочитаемого регистратора доменных имен.
      • На вашем сервере должны быть настроены обе нижеследующие записи DNS. В руководстве «Введение в DigitalOcean DNS» содержится подробная информация по их добавлению.

        • Запись A, где example.com указывает на публичный IP-адрес вашего сервера.
        • Запись A, где www.example.com указывает на публичный IP-адрес вашего сервера.

      Шаг 1 — Установка и настройка Elasticsearch

      Компоненты комплекса Elastic отсутствуют в репозиториях пакетов Ubuntu по умолчанию. Однако их можно установить с помощью APT после добавления списка источников пакетов Elastic.

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

      Для начала запустите следующую команду для импорта открытого ключа Elasticsearch GPG в APT:

      • wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

      Затем добавьте список источников Elastic в каталог sources.list.d, где APT будет искать новые источники:

      • echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

      Затем обновите списки пакетов, чтобы APT мог прочитать новый источник Elastic:

      Установите Elasticsearch с помощью следующей команды:

      • sudo apt install elasticsearch

      После завершения установки Elasticsearch используйте предпочитаемый текстовый редактор для редактирования главного файла конфигурации Elasticsearch с именем elasticsearch.yml. Мы будем использовать nano:

      • sudo nano /etc/elasticsearch/elasticsearch.yml

      Примечание. Файл конфигурации Elasticsearch имеет формат YAML, и это значит, что отступы имеют большое значение! Не добавляйте никакие дополнительные пробелы при редактировании этого файла.

      Elasticsearch прослушивает весь трафик порта 9200. Вы можете захотеть ограничить внешний доступ к вашему экземпляру Elasticsearch, чтобы посторонние не могли читать ваши данные или отключать ваш кластер Elasticsearch через REST API. Найдите строку с указанием network.host, уберите с нее значок комментария и замените значение на localhost, чтобы она выглядела следующим образом:

      /etc/elasticsearch/elasticsearch.yml

      . . .
      network.host: localhost
      . . .
      

      Сохраните и закройте файл elasticsearch.yml, нажав CTRL+X, а затем Y и ENTER, если вы используете nano. Затем запустите службу Elasticsearch с помощью systemctl:

      • sudo systemctl start elasticsearch

      Затем запустите следующую команду, чтобы активировать Elasticsearch при каждой загрузке сервера:

      • sudo systemctl enable elasticsearch

      Вы можете протестировать работу службы Elasticsearch, отправив запрос HTTP:

      • curl -X GET "localhost:9200"

      Вы получите ответ, содержащий базовую информацию о локальном узле:

      Output

      { "name" : "ZlJ0k2h", "cluster_name" : "elasticsearch", "cluster_uuid" : "beJf9oPSTbecP7_i8pRVCw", "version" : { "number" : "6.4.2", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "04711c2", "build_date" : "2018-09-26T13:34:09.098244Z", "build_snapshot" : false, "lucene_version" : "7.4.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }

      Мы настроили и запустили Elasticsearch, и теперь можем перейти к установке Kibana, следующего компонента комплекса Elastic.

      Шаг 2 — Установка и настройка информационной панели Kibana

      Согласно официальной документации, Kibana следует устанавливать только после установки Elasticsearch. Установка в этом порядке обеспечивает правильность установки зависимостей компонентов.

      Поскольку вы уже добавили источник пакетов Elastic на предыдущем шаге, вы можете просто установить все остальные компоненты комплекса Elastic с помощью apt:

      Затем активируйте и запустите службу Kibana:

      • sudo systemctl enable kibana
      • sudo systemctl start kibana

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

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

      Следующая команда создаст административного пользователя Kibana и пароль и сохранит их в файле htpasswd.users. Вы настроите Nginx для использования этого имени пользователя и пароля и моментально прочитаете этот файл:

      • echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

      Введите и подтвердить пароль в диалоговом окне. Запомните или запишите эти учетные данные, поскольку они вам потребуются для доступа к веб-интерфейсу Kibana.

      Теперь мы создадим файл серверного блока Nginx. В качестве примера мы присвоим этому файлу имя example.com, хотя вы можете дать ему более описательное имя. Например, если вы настроили записи FQDN и DNS для этого сервера, вы можете присвоить этому файлу имя FQDN:

      • sudo nano /etc/nginx/sites-available/example.com

      Добавьте в файл следующий блок кода, заменив example.com для соответствия FQDN или публичному IP-адресу вашего сервера. Этот код настраивает Nginx для перенаправления трафика HTTP вашего сервера в приложение Kibana, которое прослушивает порт localhost:5601. Также он настраивает Nginx для чтения файла htpasswd.users и требует использования базовой аутентификации.

      Если вы выполнили предварительный обучающий модуль по Nginx до конца, возможно вы уже создали этот файл и заполнили его. В этом случае удалите из файла все содержание и добавьте следующее:

      /etc/nginx/sites-available/example.com

      server {
          listen 80;
      
          server_name example.com;
      
          auth_basic "Restricted Access";
          auth_basic_user_file /etc/nginx/htpasswd.users;
      
          location / {
              proxy_pass http://localhost:5601;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection 'upgrade';
              proxy_set_header Host $host;
              proxy_cache_bypass $http_upgrade;
          }
      }
      

      Завершив редактирование, сохраните и закройте файл.

      Затем активируйте новую конфигурацию, создав символическую ссылку на каталог sites-enabled. Если вы уже создали файл серверного блока с тем же именем, что и в обучающем модуле по Nginx, вам не нужно выполнять эту команду:

      • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

      Затем проверьте конфигурацию на синтаксические ошибки:

      Если в результатах будут показаны какие-либо ошибки, вернитесь и еще раз проверьте правильность изменений в файле конфигурации. Когда вы увидите на экране результатов сообщение syntax is ok, перезапустите службу Nginx:

      • sudo systemctl restart nginx

      Если вы следовали указаниям модуля по начальной настройке сервера, у вас должен быть включен брандмауэр UFW. Чтобы разрешить соединения с Nginx, мы можем изменить правила с помощью следующей команды:

      • sudo ufw allow 'Nginx Full'

      Примечание. Если вы выполнили предварительный обучающий модуль Nginx, вы могли уже создать правило UFW, разрешающее профилю Nginx HTTP доступ через брандмауэр. Поскольку профиль Nginx Full разрешает трафик HTTP и HTTPS на брандмауэре, вы можете безопасно удалить ранее созданное правило. Для этого нужно использовать следующую команду:

      • sudo ufw delete allow 'Nginx HTTP'

      Теперь приложение Kibana доступно через FQDN или публичный IP-адрес вашего сервера комплекса Elastic. Вы можете посмотреть страницу состояния сервера Kibana, открыв следующий адрес и введя свои учетные данные в диалоге:

      http://your_server_ip/status
      

      На этой странице состояния отображается информация об использовании ресурсов сервера, а также выводится список установленных плагинов.

      |Страница состояния Kibana

      Примечание. Как указывалось в разделе предварительных требований, рекомендуется включить на сервере SSL/TLS. Вы можете следовать указаниям этого модуля, чтобы получить бесплатный сертификат SSL для Nginx в Ubuntu 18.04. После получения сертификата SSL/TLS вы можете вернуться и завершить прохождение этого обучающего модуля.

      Теперь информационная панель Kibana настроена и мы перейдем к установке следующего компонента: Logstash.

      Шаг 3 — Установка и настройка Logstash

      Хотя Beats может отправлять данные напрямую в базу данных Elasticsearch, мы рекомендуем использовать для обработки данных Logstash. Это позволит вам собирать данные из разных источников, преобразовывать их в общий формат и экспортировать в другую базу данных.

      Установите Logstash с помощью следующей команды:

      • sudo apt install logstash

      После установки Logstash вы можете перейти к настройке. Файлы конфгурации Logstash имеют формат JSON и находятся в каталоге /etc/logstash/conf.d. При настройке полезно представлять Logstash как конвейер, который принимает данные с одной стороны, обрабатывает их и отправляет в пункт назначения (в данном случае в Elasticsearch). Конвейер Logstash имеет два обязательных элемента, input и output, а также необязательный элемент filter. Плагины ввода потребляют данные источника, плагины фильтра обрабатывают данные, а плагины вывода записывают данные в пункт назначения.

      Конвейер Logstash

      Создайте файл конфигурации с именем 02-beats-input.conf, где вы настроите ввод данных Filebeat:

      • sudo nano /etc/logstash/conf.d/02-beats-input.conf

      Вставьте следующую конфигурацию input. В ней задается ввод beats, который прослушивает порт TCP 5044.

      /etc/logstash/conf.d/02-beats-input.conf

      input {
        beats {
          port => 5044
        }
      }
      

      Сохраните и закройте файл. Затем создайте файл конфигурации с именем 10-syslog-filter.conf, куда мы добавим фильтр для системных журналов или syslogs:

      • sudo nano /etc/logstash/conf.d/10-syslog-filter.conf

      Вставьте следующую конфигурацию фильтра syslog. В этом примере конфигурация системных журналов взята из официальной документации по Elastic. Этот фильтр используется для синтаксического анализа входящих системных журналов, их структуризации и преобразования в удобный для использования вид с помощью панелей Kibana:

      /etc/logstash/conf.d/10-syslog-filter.conf

      filter {
        if [fileset][module] == "system" {
          if [fileset][name] == "auth" {
            grok {
              match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:[%{POSINT:[system][auth][pid]}])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:[%{POSINT:[system][auth][pid]}])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:[%{POSINT:[system][auth][pid]}])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:[%{POSINT:[system][auth][pid]}])?: s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:[%{POSINT:[system][auth][pid]}])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:[%{POSINT:[system][auth][pid]}])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:[%{POSINT:[system][auth][pid]}])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
              pattern_definitions => {
                "GREEDYMULTILINE"=> "(.|n)*"
              }
              remove_field => "message"
            }
            date {
              match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
            }
            geoip {
              source => "[system][auth][ssh][ip]"
              target => "[system][auth][ssh][geoip]"
            }
          }
          else if [fileset][name] == "syslog" {
            grok {
              match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:[%{POSINT:[system][syslog][pid]}])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
              pattern_definitions => { "GREEDYMULTILINE" => "(.|n)*" }
              remove_field => "message"
            }
            date {
              match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
            }
          }
        }
      }
      

      Сохраните и закройте файл после завершения.

      Наконец, создайте файл конфигурации 30-elasticsearch-output.conf:

      • sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf

      Вставьте следующую конфигурацию output. Этот вывод настраивает Logstash для хранения данных Beats в Elasticsearch, запущенном на порту localhost:9200, в индексе с названием используемого компонента Beat. В этом обучающем модуле используется компонент Beat под названием Filebeat:

      /etc/logstash/conf.d/30-elasticsearch-output.conf

      output {
        elasticsearch {
          hosts => ["localhost:9200"]
          manage_template => false
          index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
        }
      }
      

      Сохраните и закройте файл.

      Если вы you хотите добавить фильтры для других приложений, использующих ввод Filebeat, присваивайте файлам имена, чтобы их можно было сортировать между конфигурациями ввода и вывода. Это значит, что имена файлов должны начинаться с двузначных чисел от 02 до 30.

      Протестируйте свою конфигурацию Logstash с помощью следующей команды:

      • sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

      Если ошибок синтаксиса нет, вы увидите сообщение Configuration OK спустя несколько секунд. Если вы не увидите этого сообщения, проверьте ошибки вывода и обновите конфигурацию для их исправления.

      Если тестирование конфигурации выполнено успешно, запустите и активируйте Logstash, чтобы изменения конфигурации вступили в силу:

      • sudo systemctl start logstash
      • sudo systemctl enable logstash

      Теперь Logstash работает нормально и полностью настроен, и мы можем перейти к установке Filebeat.

      Шаг 4 — Установка и настройка Filebeat

      Комплекс Elastic Stack использует несколько компактных элементов транспортировки данных (Beats) для сбора данных из различных источников и их транспортировки в Logstash или Elasticsearch. Ниже перечислены компоненты Beats, доступные в Elastic:

      • Filebeat: собирает и отправляет файлы журнала.
      • Metricbeat: собирает метрические показатели использования систем и служб.
      • Packetbeat: собирает и анализирует данные сети.
      • Winlogbeat: собирает данные журналов событий Windows.
      • Auditbeat: собирает данные аудита Linux и отслеживает целостность файлов.
      • Heartbeat: отслеживает доступность услуг посредством активного зондирования.

      В этом обучающем модуле мы используем Filebeat для перенаправления локальных журналов в комплекс Elastic Stack.

      Установите Filebeat с помощью apt:

      • sudo apt install filebeat

      Затем настройте Filebeat для подключения к Logstash. Здесь мы изменим образец файла конфигурации, входящий в комплектацию Filebeat.

      Откройте файл конфигурации Filebeat:

      • sudo nano /etc/filebeat/filebeat.yml

      Примечание. Как и в Elasticsearch, файл конфигурации Filebeat имеет формат YAML. Это означает, что в файле учитываются отступы, и вы должны использовать точно такое количество пробелов, как указано в этих инструкциях.

      Filebeat поддерживает разнообразные выводы, но обычно события отправляются только напрямую в Elasticsearch или в Logstash для дополнительной обработки. В этом обучающем модуле мы будем использовать Logstash для дополнительной обработки данных, собранных Filebeat. Filebeat не потребуется отправлять данные в Elasticsearch напрямую, поэтому мы отключим этот вывод. Для этого мы найдем раздел output.elasticsearch и поставим перед следующими строками значок комментария #:

      /etc/filebeat/filebeat.yml

      ...
      #output.elasticsearch:
        # Array of hosts to connect to.
        #hosts: ["localhost:9200"]
      ...
      

      Затем настроим раздел output.logstash. Уберите режим комментариев для строк output.logstash: и hosts: ["localhost:5044"], удалив значки #. Так мы настроим Filebeat для подключения к Logstash на сервере комплекса Elastic Stack через порт 5044, который мы ранее задали для ввода Logstash:

      /etc/filebeat/filebeat.yml

      output.logstash:
        # The Logstash hosts
        hosts: ["localhost:5044"]
      

      Сохраните и закройте файл.

      Функции Filebeat можно расширить с помощью модулей Filebeat. В этом обучающем модуле мы будем использовать модуль system, который собирает и проверяет данные журналов, созданных службой регистрации систем в распространенных дистрибутивах Linux.

      Давайте активируем его:

      • sudo filebeat modules enable system

      Вы увидите список включенных и отключенных модулей с помощью следующей команды:

      • sudo filebeat modules list

      Вы увидите примерно следующий список:

      Output

      Enabled: system Disabled: apache2 auditd elasticsearch icinga iis kafka kibana logstash mongodb mysql nginx osquery postgresql redis traefik

      Filebeat по умолчанию настроен для использования путей по умолчанию для системных журналов и журналов авторизации. Для целей данного обучающего модуля вам не нужно ничего изменять в конфигурации. Вы можете посмотреть параметры модуля в файле конфигурации /etc/filebeat/modules.d/system.yml.

      Затем загрузите в Elasticsearch шаблон индекса. Индекс Elasticsearch — это коллекция документов со сходными характеристиками. Индексы идентифицируются по имени, которое используется для ссылки на индекс при выполнении различных операций внутри него. Шаблон индекса применяется автоматически при создании нового индекса.

      Используйте следующую команду для загрузки шаблона:

      • sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

      Output

      Loaded index template

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

      При загрузке информационных панелей Filebeat подключается к Elasticsearch для проверки информации о версиях. Для загрузки информационных панелей при включенном Logstash необходимо отключить вывод Logstash и активировать вывод Elasticsearch:

      • sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

      Вы получите следующий результат:

      Output

      2018-09-10T08:39:15.844Z INFO instance/beat.go:273 Setup Beat: filebeat; Version: 6.4.2 2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-09-10T08:39:15.845Z INFO pipeline/module.go:98 Beat name: elk 2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-09-10T08:39:15.849Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2 2018-09-10T08:39:15.856Z INFO template/load.go:129 Template already exists and will not be overwritten. Loaded index template Loading dashboards (Kibana must be running and reachable) 2018-09-10T08:39:15.857Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-09-10T08:39:15.865Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2 2018-09-10T08:39:15.865Z INFO kibana/client.go:113 Kibana url: http://localhost:5601 2018-09-10T08:39:45.357Z INFO instance/beat.go:659 Kibana dashboards successfully loaded. Loaded dashboards 2018-09-10T08:39:45.358Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-09-10T08:39:45.361Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2 2018-09-10T08:39:45.361Z INFO kibana/client.go:113 Kibana url: http://localhost:5601 2018-09-10T08:39:45.455Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled Loaded machine learning job configurations

      Теперь вы можете запустить и активировать Filebeat:

      • sudo systemctl start filebeat
      • sudo systemctl enable filebeat

      Если вы правильно настроили комплекс Elastic, Filebeat начнет отправлять системный журнал и журналы авторизации в Logstash, откуда эти данные будут загружаться в Elasticsearch.

      Чтобы подтвердить получение этих данных в Elasticsearch необходимот отправить в индекс Filebeat запрос с помощью следующей команды:

      • curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

      Вы увидите примерно следующий результат:

      Output

      ... { "took" : 32, "timed_out" : false, "_shards" : { "total" : 3, "successful" : 3, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 1641, "max_score" : 1.0, "hits" : [ { "_index" : "filebeat-6.4.2-2018.10.10", "_type" : "doc", "_id" : "H_bZ62UBB4D0uxFRu_h3", "_score" : 1.0, "_source" : { "@version" : "1", "message" : "Oct 10 06:22:36 elk systemd[1]: Reached target Local File Systems (Pre).", "@timestamp" : "2018-10-10T08:43:56.969Z", "host" : { "name" : "elk" }, "source" : "/var/log/syslog", "input" : { "type" : "log" }, "tags" : [ "beats_input_codec_plain_applied" ], "offset" : 296, "prospector" : { "type" : "log" }, "beat" : { "version" : "6.4.2", "hostname" : "elk", "name" : "elk" } } }, ...

      Если в результатах показано 0 совпадений, Elasticsearch не выполняет загрузку журналов в индекс, который вы искали, и вам нужно проверить настройки на ошибки. Если вы получили ожидаемые результаты, перейдите к следующему шагу, где мы увидим, как выполняется навигация по информационным панелям Kibana.

      Шаг 5 — Изучение информационных панелей Kibana

      Давайте получше познакомимся с веб-интерфейсом Kibana, который мы установили на одном из предыдущих шагов.

      Откройте в браузере FQDN или публичный IP-адрес вашего сервера Elastic Stack. После ввода учетных данных, заданных на шаге 2, вы увидите главную страницу Kibana:

      Главная страница Kibana

      Нажмите ссылку Discover в левой панели навигации для обзора интерфейса. Выберите на странице Discover заранее настроенный индекс filebeat- для просмотра данных Filebeat. По умолчанию при этом будут выведены все данные журналов за последние 15 минут. Ниже вы увидите гистограмму с событиями журнала и некоторыми сообщениями журнала:

      Страница Discover

      Здесь вы можете искать и просматривать журналы, а также настраивать информационные панели. Сейчас на этой странице будет немного данных, потому что вы собираете системные журналы только со своего сервера Elastic Stack.

      Используйте левую панель навигации для перехода на страницу Dashboard и выполните на этой странице поиск информационных панелей Filebeat System. На этой странице вы можете искать образцы информационных панелей, входящих в комплектацию модуля system в Filebeat.

      Например, вы можете просматривать подробную статистику по сообщениям системного журнала:

      Информационная панель Syslog

      Также вы сможете видеть, какие пользователи использовали команду sudo и когда:

      Информационная панель Sudo

      В Kibana имеется множество других функций, в том числе функции фильтрации и составления диаграмм, так что вы можете свободно их исследовать.

      Заключение

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



      Source link