前期环境准备
组件简述:
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支持的监控选项
-
ICMP(IPV4/IPV6)回显请求。当你只是想检查服务是否可用时,可以使用
icmp
。这个监控器需要管理员权限 -
TCP。
tcp
监控器是通过TCP协议来连接。可以选择配置tcp
监控器,通过发送或接受自定义有效内容(payload)来验证端点(endpoint)是否可用 -
HTTP。使用
http
监控器是通过http协议进行连接。可以选择配置http
监控器来验证服务是否返回预期的响应,例如,特定的状态码,响应头或者内容 -
tcp
和http
都支持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]
scheme
为tcp
,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
,GET
和POST
- headers - 设置请求头
- body - 选填请求体(用于POST方法)
- method - HTTP方法。支持
-
check.response
选项- status - 期望的响应码。未设置或者设置的是
0
,除404
以外状态码均可 - headers - 必须响应的header头信息
- body - 必须的响应体
- status - 期望的响应码。未设置或者设置的是
- 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
监测详情如下图所示: