ELK
通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK 又称为 ELK stack,官方域名为 stactic.co,ELK stack 的主要优点有如下几个: 处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能 配置相对简单:elasticsearch全部使用 JSON 接口,logstash 使用模块配置,kibana 的配置文件部分更简单。 检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。 集群线性扩展:elasticsearch 和 logstash 都可以灵活线性扩展 前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单
ELK使用场景:
? 日志平台:利用elasticsearch的快速检索功能,在大量的数据当中可以快速查询需要的日志。
? 订单平台:利用elasticsearch的快速检索功能,在大量的订单当中检索我们所需要的订单。
? 搜索平台:利用elasticsearch的快速检索功能,在大量的数据中检索出我们所需要的数据。
Elasticsearch
Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索、支持分布式可实现高可用、提供 API 接口,可以处理大规模日志数据,比如 Nginx、Tomcat、系统日志等功能。
部署ElasticSearch
一般部署elasticsearch有三种方式:
? rpm包安装
? 源码包安装
? docker安装
官网下载地址:https://www.elastic.co/cn/downloads/elasticsearch
官网其他版本安装包下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
一、ELK部署
1、环境准备
主机 | IP | 条件 |
---|
es01 | 192.168.15.71 | 关闭sellinux和防火墙 | es02 | 192.168.15.72 | 关闭sellinux和防火墙 |
2、优化
-
集群配置 官方推荐集群配置30G。本地使用2核2G -
系统优化
# 基础优化
[root@elk01 ~]# cat base.sh
#!/bin/bash
# 1、修改主机名和网卡
hostnamectl set-hostname $1 &&\
sed -i "s#111#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth[01] &&\
systemctl restart network &&\
# 2、关闭selinux和防火墙和ssh连接
setenforce 0 &&\
sed -i 's#enforcing#disabled#g' /etc/selinux/config &&\
systemctl disable --now firewalld &&\
# 如果iptables没有安装就不需要执行
# systemctl disable --now iptables &&\
sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config &&\
systemctl restart sshd
[root@elk01 ~]# yum -y install ntpdate
[root@elk01 ~]# ntpdate ntp.aliyun.com
[root@elk01 ~]# vim /etc/security/limits.conf
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
# End of file
#* - nofile 65535
* soft memlock unlimited
* hard memlock unlimited
* soft nofile 131072
* hard nofile 131072
# reboot重启生效
3、下载安装包
# 官网 https://www.elastic.co/downloads/elasticsearch
# 方式一:yum安装
[root@elk01 opt]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.1-x86_64.rpm
[root@es01 opt]# ll
total 318004
-rw-r--r-- 1 root root 325635185 Apr 28 00:07 elasticsearch-7.12.1-x86_64.rpm
[root@es01 opt]# yum install elasticsearch-7.12.1-x86_64.rpm -y
因为 elasticsearch 服务运行需要 java 环境,因此两台 elasticsearch 服务器需要
安装 java 环境,可以使用以下方式安装:
方式一:直接使用 yum 安装 openjdk
[root@es01 opt]# yum install java-1.8.0* -y
[root@es01 opt]# java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
===================================================================================
# 方式二:源码包安装
[root@es01 opt]# wget https://github.com/elastic/elascticsearch/archive/refs/tags/v7.12.1.tar.gz
[root@es01 opt]# tar xf *.gz
[root@es01 opt]# yum install java-1.8.0* -y
[root@es01 opt]# java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
==================================================================================
# 方式三:docker安装
# 官网 https://www.elastic.co/downloads/elasticsearch
docker run -p 9200:9200 -p 9300:9300 -e "cluster.name=mm" docker.elastic.co/elasticsearch/elasticsearch:7.13.2
4、设置elastcsearch内存锁定
[root@linux-host1 ~]# vim /usr/lib/systemd/system/elasticsearch.service
[service]
LimitMEMLOCK=infinity ## 修改内存限制(添加)
[root@linux-host1 ~]# vim /etc/elasticsearch/jvm.options
-Xms2g
-Xmx2g
5、修改elastcsearch内存大小
[root@elk01 opt]# vim /etc/elasticsearch/jvm.options
## -Xms4g
## -Xmx4g
-Xms1g
-Xmx1g
6、修复elastcsearch配置文件(单台测试)
[root@elk01 opt]# egrep '^[^#]' /etc/elasticsearch/elasticsearch.yml
cluster.name: mm-by-es # 设置集群名称
node.name: mm-node-01 # 设置集群节点名称 (集群中,节点名称必须唯一)
path.data: /var/lib/elasticsearch # 设置数据存放路径
path.logs: /var/log/elasticsearch # 设置存放日志路径
bootstrap.memory_lock: true # 锁定内存
network.host: 0.0.0.0 # 监听的IP
http.port: 9200 # 监听端口
# 设置主节点
cluster.initial_master_nodes: ["172.16.1.72"] #可以本地hosts
7、启动服务
[root@elk01 opt]# systemctl daemon-reload
[root@elk01 opt]# systemctl restart elasticsearch.service
[root@elk01 opt]# netstat -lntp 6122/rpcbind #验证启动成功
tcp6 0 0 :::9200 :::* LISTEN 7733/java
tcp6 0 0 :::9300 :::* LISTEN
二、安装集群head插件
head插件主要是图形化elastic search
1、docker安装
# 提前安装好docker
[root@elk01 opt]# docker run -d -p 9100:9100 alvinos/elasticsearch-head
# 192.168.15.72:9100 访问
2、设置elasticsearch跨越访问
[root@elk01 opt]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@elk01 opt]# systemctl restart elasticsearch.service
# 192.168.15.72:9100 #集群成功
# 如果发生报错,检测端口,然后重新启动服务
三、部署elasticsearch主从
elasticsearch是主从数据节点分离的,安装节点还可以分为热数据节点和冷数据节点
1、部署elasticsearch主节点
参考上述单节点部署
# 1、主节点基础优化
[root@elk01 opt]# egrep '^[^#]' /etc/elasticsearch/elasticsearch.yml
cluster.name: mm-by-es
node.name: mm-node-01
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.initial_master_nodes: ["172.16.1.72"]
discovery.zen.minimum_master_nodes: 2 #设置选项策略
discovery.zen.ping.unicast.hosts: ["172.16.1.72","172.16.1.71"] #设置节点
node.master: true #设置是否的主节点
#2、启动elasticsearch服务
[root@elk01 opt]# systemctl restart elasticsearch.service
# 3、ip访问
192.168.15.72:9100
2、部署elasticsearch从节点
# 1、从节点基础优化
# 2、修改配置文件
[root@elk01 opt]# scp /etc/elasticsearch/elasticsearch.yml es01:/etc/elasticsearch/
[root@es01 opt]# egrep '^[^#]' /etc/elasticsearch/elasticsearch.yml
cluster.name: mm-by-es
node.name: mm-node-02 #名字改变
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.initial_master_nodes: ["172.16.1.72"]
discovery.zen.minimum_master_nodes: 2 #设置选项策略
discovery.zen.ping.unicast.hosts: ["172.16.1.72","172.16.1.71"] #设置节点
node.master: false #设置是否的主节点
# 3、查看日志
[root@es01 opt]# systemctl status elasticsearch.service -l
# 4、启动elasticsearch服务
[root@es01 opt]# systemctl restart elasticsearch.service
# 5、ip访问
192.168.15.71:9100
四、LogStach
Logstash 是一个开源的数据收集引擎,可以水平伸缩,而且 logstash 整个 ELK
当中拥有最多插件的一个组件,其可以接收来自不同来源的数据并统一输出到指
定的且可以是多个不同目的地
# 区别
logstach 收集数据
elasticsearch 搜索数据
1、部署LogStach(两台)
官网:https://www.elastic.co/cn/downloads/past-releases
# 方式一:rpm安装
# 选择和elasticsearch对应的版本
[root@es01 opt]# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.12.1-x86_64.rpm
[root@es01 yum.repos.d]# yum install logstash-7.12.1-x86_64.rpm -y
[root@es01 yum.repos.d]# chown -R logstash.logstash /usr/share/logstash
# 报错
【已解决】执行yum命令失败:error: rpmdb: BDB0113 Thread/process 16978/139878363277376 failed: BDB1507 Thread died in Berkeley DB library
[root@es01 yum.repos.d]# rm -rf /var/lib/rpm/*
# yum报403
[root@es01 yum.repos.d]# sed -i 's#$releasever#7#g' *.repo
# 重新安装logstash
[root@es01 yum.repos.d]# yum install logstash-7.12.1-x86_64.rpm
[root@es01 yum.repos.d]# chown -R logstash.logstash /usr/share/logstash
# 方式二:源码包安装
# 方式三:docker安装
2、使用logstach --输出
官网: https://www.elastic.co/guide/en/logstash/current/output-plugins.html
# 1、输入输出到shell控制台 ( codec是编码器,直白的说就是控制输出类型,默认是json)
[root@elk01 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin{} }
output { stdout{ codec => rubydebug }}' #标准输入和输出
# 直接输入即可
您好
{
"@version" => "1",
"@timestamp" => 2021-07-07T09:37:42.338Z,
"message" => "您好",
"host" => "es02"
# 2、输入输出到文件中
[root@elk01 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { file { path => "/tmp/log-%{+YYYY.MM.dd}messages.gz"}}'
[root@elk01 tmp]# ll #查看文件
-rw-r--r-- 1 root root 91 Aug 29 20:24 log-2021.08.29messages.gz
# 3、输入输出到elasticsearch
[root@elk01 opt]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch {hosts => ["172.16.1.72:9200"] index => "mytest-%{+YYYY.MM.dd}" }}'
# 查看文件
在172.16.1.72:9200的elasticsearch中
# 4、输入输出到redis
[root@elk01 ~]# vim /etc/redis.conf
bind 0.0.0.0
[root@elk01 ~]# systemctl restart redis
[root@elk01 tmp]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output {redis { host => "172.16.1.72" port => "6379" data_type => "list" key => "logstash-%{type}" }}'
您好
[root@elk01 tmp]# redis-cli #查看
127.0.0.1:6379> KEYS *
1) "logstash-%{type}"
2) "a"
# 报错处理
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000ca660000, 899284992, 0) failed; error='Not enough space' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 899284992 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /tmp/hs_err_pid1995.log
解决:
内存不足,加大内存
3、logstch读取日志文件 --读取
官网 https://www.elastic.co/guide/en/logstash/current/input-plugins.html
# 1、读取elasticsearch
[root@elk01 ~]# /usr/share/logstash/bin/logstash -e 'input { file { path => "/var/log/messages" } } output { elasticsearch {hosts => ["172.16.1.72:9200"] index => "system-log-%{+YYYY.MM.dd}" }}'
#2、在标准输出中读取
[root@elk01 ~]#/usr/share/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch {hosts => ["172.16.1.72:9200"] index => "system-stdin-%{+YYYY.MM.dd}" }}'
# 3、分离
sudo /usr/share/logstash/bin/system-install /etc/logstash/s tartup.options systemd
分类
从多个文件中读取文件
path => "/var/log/messages" #日志路径
type => "systemlog" #事件的唯一类型
start_position => "beginning" #第一次收集日志的位置
stat_interval => "3" #日志收集的间隔时间
[root@es-01 /opt]# /usr/share/logstash/bin/logstash -e 'input { file{ path => "/var/log/messages" type => "systemlog" start_position => "beginning" stat_interval => "3" } file{ path => "/var/log/cron" type => "systemcron" start_position => "beginning" stat_interval => "3" } } output { elasticsearch {hosts => ["192.168.15.72:9200"] index => "system-stdin-%{+YYYY.MM.dd}" }}'
# 4、分类输出多个数据仓库
[root@es-01 /opt]# /usr/share/logstash/bin/logstash -e 'input { file{ path => "/var/log/messages" type => "systemlog" start_position => "beginning" stat_interval => "3" } file{ path => "/var/log/cron" type => "systemcron" start_position => "beginning" stat_interval => "3" } } output { if [type] == "systemlog" { elasticsearch {hosts => ["192.168.15.72:9200"] index => "system-systemlog-%{+YYYY.MM.dd}" }} if [type] == "systemcron" { elasticsearch {hosts => ["192.168.15.72:9200"] index => "system-systemcron-%{+YYYY.MM.dd}" } } }'
# 5、使用配置文件
# 测试配置文件 下面显示ok就代表配置文件没问题
[root@es-01 ~]# vim test.conf #上面的文件
[root@es-01 ~]# /usr/share/logstash/bin/logstash -f test.conf -t (-t代表测试,不加t就是使用配置文件)
五、kibana
官网:https://www.elastic.co/cn/downloads/past-releases
# 1、下载安装包
[root@elk01 opt]# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.12.1-x86_64.rpm
# 2、安装
[root@elk01opt]# yum -y install kibana-7.12.1-x86_64.rpm
# 3、修改配置文件
[root@elk01 opt]# grep '^[^#]' /etc/kibana/kibana.yml
server.port: 5601 #监听端口
server.host: "0.0.0.0" #监听地址
elasticsearch.hosts: ["http://172.16.1.72:9200"] #elasticsearch 服务器地
# 4、启动kibana
[root@elk01 opt]# systemctl enable --now kibana
记得要打开logstash这样kibana才有数据出来
|