ELK日志分析监控平台

前期环境准备

组件简述:

1、Elasticsearch:

主要用来日志存储

es是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

2、Kibana: 主要用于日志的展示

kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持,它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

3、Logstash:

主要用来日志的搜集(filebeat)json xml .conf output

主要是用来日志的搜集、分析、过滤日志的工具。用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。

4、Filebeat:隶属于Beats家族,轻量级数据收集引擎

5、 Metricbeat

(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据。通过从操作系统和服务收集指标,帮助您监控服务器及其托管的服务。

6、heartbeat心跳监测

不管测试同一台主机上的服务,还是要测试开放网络上的服务,Heartbeat 都能轻松生成运行时间数据和响应时间数据 Heartbeat 能够通过 ICMP.TCP 和 HTTP 进行 ping 检测,同时也支持 TLS.认证和代理.您可以借助简易的 DNS 解析,监控负载均衡服务器背后的所有主机. 安装系统环境。

正式部署

本文以elasticsearch7.9.3版本为例

#因docker 容器启动时IP自动分配,kibana每次都需要配置,故直接指定docker的ip地址,故在部署之前创建ELK专属网络,新建一个ELK网络

#后续在部署容器时选择该网络

docker network create elk   

#查看xybnet的网络信息

docker inspect elk

[root@luck ~]# docker inspect elk
[
    {
        "Name": "elk",
        "Id": "9e1a325741952d462de91df24394c5644fb9256271ad44a3953e6eafadad5f18",
        "Created": "2023-02-21T15:54:49.822705457+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }

一,安装elastalert服务

1.1 创建es 相关挂载目录

mkdir -p /data/elasticsearch/config   

#拉取elasticsearch:7.9.3版本镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.9.3

在/data/elasticsearch/config/目录下新建文件

touch elasticsearch.yml

mkdir -p /data/elasticsearch/data

mkdir -p /data/elasticsearch/plugins

#权限不足问题

chmod -R 777 /data/elasticsearch

1.2 构建es容器

docker run -p 9200:9200 -d --name es \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" --network elk \
-v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
--privileged=true \
elasticsearch:7.9.3

# 若出现报错异常:

max virtual memory areas vm.max_map_count [65530] is too low, increase to atleast [262144]

# 解决方法

#修改配置文件sysctl.conf
vi /etc/sysctl.conf

#在尾行添加以下内容
vm.max_map_count=655300

#执行命令
sysctl -p
1.2.1 写入配置内容到es配置文件

echo "http.host: 0.0.0.0">>/data/elasticsearch/config/elasticsearch.yml

1.2.2 测试elasticsearch服务是否启动成功

IP+端口访问返回以下信息则elasticsearch服务启动成功

[root@good ~]# curl 192.168.136.125:9200
{
  "name" : "ae08b0c96b6e",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Vy0xTX0LSzKWCcWOawortA",
  "version" : {
    "number" : "7.9.3",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868",
    "build_date" : "2020-10-16T10:36:16.141335Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

二,kibana的部署

2.1 创建挂载目录

mkdir -p /data/kibana/data

mkdir -p /data/kibana/config

mkdir -p /data/kibana/plugins

chmod -R 777 /data/kibana

#拉取kibana:7.9.3镜像并启动kibana 直接指定网络

docker pull kibana:7.9.3

#写入配置内容至kibana.yml

vim /data/kibana/config/kibana.yml

server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://你的es地址:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
 

2.2 构建kibana容器

docker run -p 5601:5601 -d --name kibana --network elk \
-v /data/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
-v /data/kibana/data:/usr/share/kibana/data \
--privileged=true \
-d docker.elastic.co/kibana/kibana:7.9.3

2.3 测试kibana是否启动成功

访问方式:IP+端口:5601

 2.3 配置中文模式

#kibana 7 中官方加入了中文的选项,中文包在容器中的

/usr/share/kibana/x-pack/plugins/translations/translations/zh-CN.jso

在配置文件 /usr/share/kibana/config/kibana.yml 中加入

i18n.locale: "zh-CN"
 

三,部署elastalert-head

#elasticsearch-head是用于Elasticsearch监控的插件

docker pull mobz/elasticsearch-head:5

启动elasticsearch-head容器

docker run --name elasticsearch-head --network elk -p 9100:9100 –d mobz/elasticsearch-head:5

验证:在浏览器访问9100端口,并连接elasticsearch

访问方式ip+端口:9100 

#配置开机自启

docker update --restart=always elasticsearch-head kibana elasticsearch

另:在elasticsearch开启密码认证后es-head 连接访问elasticsearch的方式由

http://IP:9100/变更为

http://IP/?auth_user=user&auth_password=password

四,apm-server搭建

#构建apm-server容器

docker run --user=root --name=apm-server –restart=always -p 8200:8200 --network elk -d docker.elastic.co/apm/apm-server:7.9.3

修改配置文件vi apm-server.yml

#允许在kibana中对apm客户端的配置做调整

修改output.elasticsearch:

hosts:"192.168.x.x:9200"

重启apm-server

五,apm代理应用

5.1 Tomcat配置APM agent

登录到kibana界面添加APM—检测apm-server状态

下载elastic-apm-agent-<version>.jar包并放到Tomcat库lib目录下。

 jar包下载地址:

<https://search.maven.org/search?q=g:co.elastic.apm%20AND%20a:elastic-apm-agent&core=gav>

 

Tomcat启动脚本配置相关参数

以服务器上部署的springboot服务为例:

vi /data/springboot/tomcat/bin/catalina.sh

JAVA_OPTS="-javaagent:${CATALINA_HOME}/lib/elastic-apm-agent-0.7.1.jar \

-Delastic.apm.service_name=my-application \

-Delastic.apm.server_url=http://localhost:8200 \

-Delastic.apm.application_packages=org.example"

5.2 使用java代理

首先确保 APM Server 正在运行。检查apm server状态

使用 javaagent 标志启动您的应用程序

添加 -javaagent 标志并使用系统属性配置代理。

设置所需的服务名称(允许使用的字符:a-z、A-Z、0-9、-、_ 和空格)

设置定制 APM Server URL(默认值:http://localhost:8200)

设置您的应用程序的基础软件包

java -javaagent:/path/to/elastic-apm-agent-<version>.jar \ -Delastic.apm.service_name=my-application \ -Delastic.apm.server_urls=http://localhost:8200 \ -Delastic.apm.secret_token= \ -Delastic.apm.application_packages=org.example \ -jar my-application.jar

启动服务

 检查代理状态-加载kibana对象

 六,heartbeat监测服务存活

6.1 概述介绍

Heartbeat是一个轻量级守护程序,安装在远程服务器上以定期检查服务的状态,检查服务是否可用。与Metricbeat不同,Metricbeat只告诉你服务器是启动还是停止,Heartbeat可以告诉你,服务是否可以正常访问

Heartbeat可以帮你验证服务是否可以正常访问,如果你需要验证内部服务时,他还可以用于其它方案,例如,安全用例

你可以配置Heartbeat来Ping指定主机名的所有DNS可解析的IP地址。从而检查所有的负载均衡服务,是否可用

配置Heartbeat时,可以指定用于监控的hosts 。 每个监控器按照你设置的监控计划运行。例如,你可以将一个监控器配置为每10分钟运行一次,并且配置不同的监控器

6.2 Heartbeat支持的监控选项

  1. ICMP(IPV4/IPV6)回显请求。当你只是想检查服务是否可用时,可以使用icmp。这个监控器需要管理员权限

  2. TCP。 tcp监控器是通过TCP协议来连接。可以选择配置tcp监控器,通过发送或接受自定义有效内容(payload)来验证端点(endpoint)是否可用

  3. HTTP。使用http监控器是通过http协议进行连接。可以选择配置http监控器来验证服务是否返回预期的响应,例如,特定的状态码,响应头或者内容

  4. tcphttp都支持SSL/TLS和代理设置

 6.3 监控方式解释说明

ICMP选项

type设置为icmp时,该项生效。Heartbeat使用ICMP(v4和v6)回显请求来检查配置的主机

hosts

需要ping的主机列表

TCP 选项

type设置为tcp时,该项生效。通过tcp协议发送或接受自定义内容来验证端点是否可用。

hosts

需要ping的主机列表。

  • 简单的主机名,例如localhost 或者ip地址。如果你指定了这个选项,你必须在指定ports选项。如果监控器配置了使用ssl,heartbeat使用基于ssl、tls的连接。否则的话,使用普通的tcp连接
  • 主机名+端口,例如localhost:8080。heartbeat根据主机名和端口号进行连接。如果监控器配置了使用ssl,heartbeat使用基于ssl、tls的连接。否则的话,使用普通的tcp连接
  • 完整的URL,语法为 scheme://<host>:[port]
    • schemetcp,plain,ssl或者tls。如果指定的是tcp或者plain,heartbeat使用tcp连接即使监控器配置为使用ssl,如果指定了tls或者ssl,heartbeat建立ssl连接。但是如果监控器没用ssl,则使用系统默认值(暂不支持windows)
    • host是主机名。
    • port是端口号。

ports

如果hosts中没指定端口,则在此需要配置需要ping的端口列表。例如检查 80,9200,5044端口

- type: tcp  schedule: '@every 5s'  hosts: ["myhost"]  ports: [80, 9200, 5044]

HTTP选项

type设置为http时,该项生效。通过http协议验证host是否返回预期响应。

urls

用于连接的URLs列表

- type: http  schedule: '@every 5s'  urls: ["http://myhost:80"]

6.4 check

选填项发送request到远程服务,并接受期望响应response

- type: http  schedule: '@every 5s'  urls: ["http://myhost:80"]  check.request.method: HEAD  check.response.status: 200复制代码
  • check.request 选项

    • method - HTTP方法。支持HEAD,GETPOST
    • headers - 设置请求头
    • body - 选填请求体(用于POST方法)
  • check.response 选项

    • status - 期望的响应码。未设置或者设置的是0,除404以外状态码均可
    • headers - 必须响应的header头信息
    • body - 必须的响应体
- type: http  schedule: '@every 5s'  urls: ["https://myhost:80"]check.request:  method: GET  headers:    'X-API-Key': '12345-mykey-678

6.5 安装 Heartbeat

curl -L -O https://artifacts.elastic.co/downloads/beats/heartbeat/heartbeat-7.9.3-x86_64.rpm sudo rpm -vi heartbeat-7.9.3-x86_64.rpm

6.6 编辑配置

修改 /etc/heartbeat/heartbeat.yml 以设置连接信息:

output.elasticsearch: hosts: ["<es_url>"] username: "elastic" password: "<password>" setup.kibana: host: "<kibana_url>"

其中,<password> 是 elastic 用户的密码,<es_url> 是 Elasticsearch 的 URL,<kibana_url> 是 Kibana 的 URL。

编辑配置 - 添加监测

在 heartbeat.yml 文件中编辑 heartbeat.monitors 设置。

heartbeat.monitors:

- type: http

urls: ["<http://localhost:9200>"]

schedule: "@every 10s"

其中 <http://localhost:9200> 是受监测 URL。

具体配置实例如下所示:

# Configure monitors inline
heartbeat.monitors:
- type: http
  id: my-ES
  name: My ES
  urls: ["http://localhost:9200"]
  schedule: '@every 10s'
  # Total test connection and data exchange timeout
  #timeout: 16s
- type: http
  id: 124-ES
  name: 124-ES
  urls: ["192.168.136.124:9200"]
  schedule: '@every 15s'

- type: http
  id: 150-ES
  name: 150-ES
  urls: ["192.168.136.150:80"]
  schedule: '@every 15s'

6.7 启动 Heartbeat

setup 命令加载 Kibana 索引模式。

sudo heartbeat setup

sudo service heartbeat-elastic start

监测详情如下图所示:

 

猜你喜欢

转载自blog.csdn.net/qq_52497256/article/details/129144053