elkstack监控使用
目录
一、基本介绍
Elastic Stack(也称为 ELK Stack)可用于各种用例 — 从可观测性到安全性,从企业搜索到业务分析。
二、架构和组件
(一)、架构图
(二)、组件
-
elasticsearch
elasticsearch是一个分布式搜索引擎,用于搜索、分析、存储日志。
-
logstash
logstash用于采集、过滤日志,将解析后的日志输出给elasticsearch。
-
kibana
kibana是一个数据可视化组件,提供丰富的web页面。
-
filebeat
filebeat是一个轻量级的日志采集器。
三、elasticsearch
(一)、环境准备
-
服务器规划
序号 主机名 系统 1 elk-master centos7-4C8G200G 2 elk-salve centos7-4C8G200G -
系统优化
# 1. sysctl.conf配置 vi /etc/sysctl.conf fs.file-max = 655360 vm.max_map_count = 262144
# 2. limits配置(将4096改为20480) vi /etc/security/limits.d/20-nproc.conf * soft nproc 20480
-
jdk环境
# openjdk8 yum install java-1.8.0-openjdk.x86_64 -y
(二)、安装
-
下载
wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.7.1/elasticsearch-7.7.1-x86_64.rpm
-
安装
rpm -ivh elasticsearch-7.7.1-x86_64.rpm
-
创建目录和授权
# 创建目录 mkdir -pv /data/elasticsearch # 授权 chown -R elasticsearch.elasticsearch /data/elasticsearch
-
master节点配置
vim /etc/elasticsearch/elasticsearch.yml
# 集群名称 cluster.name: test # 节点名称 node.name: elk-master # 数据保存路径 path.data: /data/elasticsearch # 日志保存路径 path.logs: /data/elasticsearch/log # 网络绑定 network.host: 0.0.0.0 # 端口 http.port: 9200 # 集群发现 elk-master:9300 elk-slave:9300 discovery.seed_hosts: ["elk-master:9300", "elk-slave:9300"] # 手动指定maste节点r cluster.initial_master_nodes: ["elk-master"]
-
slave节点配置
vim /etc/elasticsearch/elasticsearch.yml
# 集群名称 cluster.name: test # 节点名称 node.name: elk-slave # 数据保存路径 path.data: /data/elasticsearch # 日志保存路径 path.logs: /data/elasticsearch/log # 网络绑定 network.host: 0.0.0.0 # 端口 http.port: 9200 # 集群发现 elk-master:9300 elk-slave:9300 discovery.seed_hosts: ["elk-master:9300", "elk-slave:9300"] # 手动指定maste节点r cluster.initial_master_nodes: ["elk-master"]
-
jvm优化配置
vi /etc/elasticsearch/jvm.options
-Xms3g -Xmx3g
-
启动
# 启动 systemctl start elasticsearch # 开机自启动 systemctl enable elasticsearch
-
验证
# 查看集群状态(green) curl -XGET http://localhost:9200/_cluster/health?pretty # 查看集群节点 curl -XGET 'http://localhost:9200/_cat/nodes?v&pretty'
-
中文分词器(可选)
# 下载 wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.1/elasticsearch-analysis-ik-7.7.1.zip # 到es的plugins 目录创建文件夹 mkdir /usr/share/elasticsearch/plugins/ik # 上传文件到该目录 elasticsearch-analysis-ik-7.7.1.zip # 解压 unzip elasticsearch-analysis-ik-7.7.1.zip # 重启es systemctl restart elasticsearch
四、logstash
(一)、安装
-
下载
wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.7.1/logstash-7.7.1.rpm
-
安装
rpm -ivh logstash-7.7.1.rpm
-
管道文件配置
# 过滤nginx的日志 vim /etc/logstash/conf.d/nginx.conf
input { beats { port => "5044" } } filter { if [fields][logtype] == "nginx-access" { mutate { gsub => ["message", "\\x", "\\\x"] } json { source => "message" } mutate { remove_field => [ "message" ] } if "HEAD" in [request_method] or "x.x.x.x" in [remote_addr] or "x.x.x.x" in [http_x_forwarded_for] { drop {} } useragent { source => "http_user_agent" target => "ua" } if "-" in [upstream_response_time] { mutate { replace => { "upstream_response_time" => "0" } } } mutate { convert => [ "upstream_response_time", "float" ] } mutate { gsub => [ "request_body", "\\x22", '"' ] gsub => [ "request_body", "\\x0A", "\n" ] } } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "%{[fields][logsource]}-%{+YYYY.MM.dd}" } }
-
logstash.yml文件配置
# 数据目录 path.data: /data/logstash/data # 日志目录 path.logs: /data/logstash/log
-
jvm优化
vim /etc/logstash/jvm.options
-Xms2g -Xmx2g
-
创建文件和授权
# 创建 mkdir -pv /data/logstash/{data,log} # 授权 chown -R logstash.logstash /data/logstash/
-
启动
# 启动 systemctl start logstash # 开机自启动 systemctl enable logstash
(二)、管理
-
nginx的json日志格式配置
log_format main '{"@timestamp":"$time_iso8601",' '"remote_addr":"$remote_addr",' '"request_uri":"$request_uri",' '"request_method":"$request_method",' '"server_protocol":"$server_protocol",' '"request_time":$request_time,' '"upstream_response_time":"$upstream_response_time",' '"upstream_addr":"$upstream_addr",' '"host":"$host",' '"hostname":"$hostname",' '"http_host":"$http_host",' '"uri":"$uri",' '"http_x_forwarded_for":"$http_x_forwarded_for",' '"http_user_agent":"$http_user_agent",' '"request_body":"$request_body",' '"status":"$status"}';
-
微服务管道配置
vim /etc/logstash/conf.d/app.conf
input { beats { port => "5045" } } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:time}\s+%{LOGLEVEL:loglevel}\s+%{NOTSPACE:service}\s+%{NUMBER:pid}\s+%{NOTSPACE:thread}\s+%{DATA:class}:\s+%{GREEDYDATA:message}"} overwrite => ["message"] } if "|" in [message] { grok { match => { "message" => "%{NOTSPACE:caller}\|+%{NOTSPACE:user}\|+%{NOTSPACE:method}\|%{GREEDYDATA:message}"} overwrite => ["message"] } } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "%{[fields][logsource]}-%{+YYYY.MM.dd}" } }
-
其他
五、filebeat
(一)、安装
-
下载
wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.7.1/filebeat-7.7.1-x86_64.rpm
-
安装
rpm -ivh filebeat-7.7.1-x86_64.rpm
-
配置
vim /etc/filebeat/filebeat.yml
# nginx日志收集 t.config_dir: /usr/share/filebeat/module filebeat.inputs: - input_type: log enabled: true paths: - /var/log/nginx/*.log document_type: test-nginx-log fields: logtype: nginx-access logsource: test-nginx-log multiline.pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after name: ip # 收集服务器ip地址 output.logstash: hosts: ["elk-master:5044"]
# java微服务日志收集 t.config_dir: /usr/share/filebeat/module filebeat.inputs: - input_type: log enabled: true paths: - /data/Log/**/*.log document_type: test-app-log fields: logsource: test-app-log multiline.pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after name: ip # 收集服务器ip地址 output.logstash: hosts: ["elk-master:5045"]
-
参数说明
# input 输入日志 # 日志路径 paths # 文档类型 document_type # 属性配置 fields # 多行日志配置 multiline # output 输出日志 # 输出到logstash output.logstash # logstash服务器地址 hosts
-
启动
# 启动 systemctl start filebeat # 开机自启动 systemctl enable filebeat
六、kibana
(一)、安装
-
下载
wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/7.7.1/kibana-7.7.1-x86_64.rpm
-
安装
rpm -ivh kibana-7.7.1-x86_64.rpm
-
配置
vim /etc/kibana/kibana.yml
# 端口 server.port: 5601 # 地址 server.host: "localhost" # es服务器地址 elasticsearch.hosts: ["http://localhost:9200"] # 中文 i18n.locale: "zh-CN"
-
启动
# 启动 systemctl start kibana # 自启动 systemctl enable kibana
-
访问web
curl http://localhost:5601
(二)、管理
-
索引管理
# 访问地址 http://localhost:5601/app/kibana#/management/elasticsearch/index_management/indices # 操作 删除、查询索引
-
索引模式
# 访问地址 http://localhost:5601/app/kibana#/management/kibana/index_patterns?_g=() # 创建索引 # 1. 定义索引模式 使用通配符 # 2. 配置设置 时间筛选字段 @timestamp
-
可视化
# 访问地址 http://localhost:5601/app/kibana#/visualize
-
仪表盘
# 访问地址 http://localhost:5601/app/kibana#/dashboards