ELK日志系统

ELK日志系统

一、ELS

1、ELS概念

ELK:是一套完整的日志集中处理方案

E:ElasticSearch ES 分布式索引型非关系数据库 作用:存储logstash输出的日志 全文检索引擎 保存的格式是json格式

L:Logstash 基于java语言开发,作用:数据收集引擎。日志的收集,可以对数据进行过滤、分析、汇总,以标准格式输出。

K:Kiabana 是ElasticSearch的可视化工具,对ES存储的数据进行可视化展示、分析和检索

优点:日志集中管理

ELK F K

F:filebeat 轻量级的开源日志文件数据搜集器,logstash 占用系统资源比较大,属于重量级,有了filebeat可以节省资源,可以通过filebeat好logstash实现远程数据收集,但是filebeat不能对数据进行标准输出,不能输出为es格式的数据,所以需要logstash把filebeat数据做标准化处理

K:kafka 消息队列

2、ELK的工作原理

2.1 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。

2.2 Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。

2.3 Elasticsearch 对格式化后的数据进行索引和存储。

2.4 Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。

二、搭建ELK架构

1、安装ELK

192.168.100.11 logstash kibana nginx/http 4/8G

192.168.100.12 es1 2/4G

192.168.100.13 es2 2/4G

一、# test1-1、test1-2、test1-3
systemctl stop firewalld
setenforce 0
yum -y install ntpdate
ntpdate ntp.aliyun.com
date

二、# test1-2 test1-3
1、环境准备
# 设置java环境
yum -y install java
java -version

2、部署 Elasticsearch 软件
(1)#安装elasticsearch---rpm包
cd /opt    # 拖elasticsearch-6.7.2.rpm包
rpm -ivh elasticsearch-6.7.2.rpm

(2)#修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
set nu
17 取消注释,指定集群名字 cluster.name: my-elk-cluster
23 取消注释,指定节点名字 Node1节点为node1,Node2节点为node2   #noder1为test1-1的,node2为test1-2的
33 取消注释,指定数据存放路径 path.data: /var/lib/elasticsearch
37 取消注释,指定日志存放路径 path.logs: /var/log/elasticsearch
43 # 保持注释,禁止使用打开空间。取消注释的话,为了避免es使用swap交换分区,bootstrap.memory_lock: true
55 取消注释,设置监听地址,0.0.0.0代表所有地址 network.host: 0.0.0.0
59 取消注释 ELS的默认端口为9200

23行下增加
node.master: true    false    # test1-1的为true   test1-2的为false
node.data: true               # test1-1和test1-2的均为true

60行下增加
transport.tcp.port: 9300      # es集群内部通信的端口

73 取消注释 discovery.zen.ping.unicast.hosts: ["192.168.100.12 9300","192.168.100.13 9300"]  # 冒号后改为上述冒号后内容
wq!
grep -v "^#" /etc/elasticsearch/elasticsearch.yml  # 检查非#以外的配置文件内容

(3)启动elasticsearch,查看是否成功开启
systemctl restart elasticsearch.service
systemctl enable elasticsearch.service
netstat -antp | grep 9200

(4)查看节点信息
浏览器访问 http://192.168.100.12:9200 和 http://192.168.100.13:9200 
查看Node1、和Node2的信息

浏览器访问 http://192.168.233.12:9200/_cluster/health?pretty  、 http://192.168.233.13:9200/_cluster/health?pretty查看群集的健康情况,可以看到 status 值为 green(绿色),表示节点健康运行

#使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。

3、安装 Elasticsearch-head 插件

yum install gcc gcc-c++ make -y   # 部署安装环境,node和phantomjs基于java环境运行

(1)编译安装node
cd /opt   # 把node-v8.2.1.tar.gz拖进去
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j 2 && make install

(2)安装 phantomjs
cd /opt   # 把 phantomjs-2.1.1-linux-x86_64.tar.bz2拖进去 
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd /opt/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

(3)安装 Elasticsearch-head 数据可视化工具
cd /opt    # 把 elasticsearch-head-master.zip拖进去
unzip elasticsearch-head-master.zip
cd elastic??
cd elasticsearch-head-master/
npm config set registry http://registry.npm.taobao.org/   # 指定为淘宝镜像
npm install   # 安装依赖包

(4)修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
--在末尾行添加一下内容--
http.cors.enabled: true        # 开启跨域访问支持,默认为false
http.cors.allow-origin: "*"    # 允许跨域访问的域名地址为所有地址
wq!
systemctl restart elasticsearch
netstat -antp | grep 9200

(5)启动 elasticsearch-head 服务
cd /opt/elasticsearch-head-maste
npm run start &
# 会出现很长一串,最后是9100,表示elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100

(6)通过 Elasticsearch-head 查看 Elasticsearch 信息
浏览器访问192.168.100.12:9100和192.168.100.13:9100 把localhost换成ip地址,集群健康值显示为绿色表示成功

(7)插入索引
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

三、# test1-1
1、ELK Logstash部署
(1)安装Apahce服务(httpd)
yum -y install httpd
systemctl start httpd

(2)安装Java环境
yum -y install java
java -version

(3)安装logstash
cd /opt     # 把 logstash-6.7.2.rpm 拖进去
rpm -ivh logstash-6.7.2.rpm                          
systemctl start logstash.service                      
systemctl enable logstash.service

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
# logstash的默认工作目录为:/etc/logstash/conf.d 在配置文件中为path.config: /opt/log,也可以指定logstash的工作目录,在配置文件中修改

(4)测试 Logstash
logstash -e 'input { stdin{} } output { stdout{} }'
# 出现很大一长串,只要结尾出现Successfully和端口9600即成功,可以在里面输入
# www.baidu.com
# www.sina.com.cn	
# www.google.com	
## 实例通过正常,ctrl+z结束

(5)修改Logstash到Elasticsearch模块
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.12:9200","192.168.100.13:9200"] } }' --path.data /opt/test1
## 出现很大一长串,只要结尾出现Successfully和端口代表成功
# www.baidu.com
# www.sina.com.cn	
# www.google.com
## 此时没有标准输出的实例,实例到Elasticsearch模块

(6)
回到浏览器访问的页面,刷新,出现Logstash-2024.08.01模块

2、创建日志收集系统
test1-1
cd /etc/logstash/conf.d    # cond.d工作目录
vim system.conf
input {
  file{
     path =>"/var/log/messages"
     type =>"system"
     start_position =>"beginning"
     # 从结尾开始end 
  }
}

output {
   elasticsearch { 
     hosts =>["192.168.100.12:9200","192.168.100.13:9200"]
     index =>"system-%{+YYYY.MM.dd}"    
   }
}
wq!
cat system.conf
chmod 777 /var/log/messages
logstash -f system.conf --path.data /opt/test2 & 
# 后台运行回车即可

3、安装kibana
test1-1
cd /opt  # 拖包

rpm -ivh kibana-6.7.2-x86_64.rpm
vim /etc
2  取消注释
7  localhost改0.0.0.0
28 取消注释 elasticsearch.hosts: ["http://192.168.100.12:9200","192.168.100.13:9200"]
96  取消注释 日志路径 logging.dest: stdout改logging.dest: /var/log/kibana.log 
113 取消注释 i18n.locale: "en"改为i18n.locale: "zh-CN"  表示使用中文
37  取消注释 打开索引名称
wq!

touch /var/log/kibana.log
chown kibana.kibana /var/log/kibana.log
systemcl restart kibana
systemcl enable kibana
netstat -antp | grep 5601
页面访问192.168.100.11:5601
管理------索引管理------索引模式------创建索引------输入"system-*"------下一步------字段选择"@timestamp"------创建索引模式------点击左栏中的"discover"可查看日志信息

2、补充内容

node:基于谷歌浏览器的运行环境

phantmjs:虚拟浏览器

es-head-master:es的独立可视化工具,可以实现分片索引数据的可视化展示

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.12:9200","192.168.100.13:9200"] } }'

1、es的主从和数据模式

node.master:true:es数据库的主从类型,主是true,非主就是false

es如何创建、修改、删除数据、数据管理?

通过http的方式

post方式修改数据

创建数据命令

curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

localhost:9200:对应的就是本地数据库的地址,可以是ip+端口

index-demo :创建索引分片的名称

test :数据的名称

1 :数据的id字段

?pretty&pretty :参数设定为json格式

-d :后面跟数据的具体内容

'{"user":"zhangsan","mesg":"hello world"}' :表示真正的数据内容

修改数据命令

curl -X POST 'localhost:9200/index-demo/test/1/_update?pretty' -H 'Content-Type: application/json' -d '{"doc": {"user": "zhangsan","mesg":"hello1 world1"} }'

删除数据命令

curl -X DELETE 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello1 world1"}'

3、收集业务日志

# test1-1

cd /etc/logstash/conf.d
vim http.conf
input {
    file {
      path => "/etc/httpd/logs/access_log"
      type => "access"
      start_position => "beginning"
  }
      file {
      path => "/etc/httpd/logs/error_log"
      type => "error"
      start_position => "beginning"
  }
}
output {
     if [type] == "access" {
     elasticsearch {
        hosts => ["192.168.100.12:9200","192.168.100.13:9200"]
        index => "apache_access-%{+YYYY.MM.dd}"
   } 
}
     if [type] == "error" {
     elasticsearch {
        hosts => ["192.168.100.12:9100","192.168.100.13:9100"]
        index => "apache_error-%{+YYYY.MM.dd}"
     }   
   }
}

logstash -f http.conf --path.data /opt/test数字 &  # 可以查看一下/opt目录,创建一个没有的test数字

API接口:软件内部代码之间通信的接口,代码的连接,代码之间的内部端口

端口是对外提供访问程序的内容结构

4、filebeat收集业务日志

nginx1 192.168.100.10

# nginx1

1、关闭防火墙和访问nginx
systemctl restart nginx
systemctl stop firewalld
setenforce 0
curl 192.168.100.10

2、安装filebea软件
cd /opt # 拖包filebeat-6.7.2-linux-x86_64.tar.gz
tar -xf filebeat-6.7.2-linux-x86_64.tar.gz
mv filebeat-6.7.2-linux-x86_64 /usr/local/filebeat
cd /usr/local/filebeat
cp filebeat.yml filebeat.yml.bak

3、修改filebea.yml配置文件
vim filebeat.yml
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
    - /var/log/nginx/error.log
   #开启日志收集,以及确定日志文本的路径
   #指定标签和发送到目标主机的logstash
  tags: ["nginx"]
  fielsd:
     service_name:192.168.100.10_nginx
     log_type:nginx
     from:192.168.100.10
一直往下

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

output.logstash:
   # The Logstash hosts
hosts: ["192.168.100.11:5055"]

#5044是logstash默认的端口,只要是logstash主机上没有被占用的端口都可以,netstat -antp | grep 5055 查看一下
wq!

# test1-1
cd /etc/logstash/conf.d
vim nginx_10.conf
input {
   beats { port => "5045"}
}

output {
   if "nginx" in [tags] {
      elasticsearch {
       hosts => ["192.168.100.12:9200","192.168.100.13:9200"]
      index =>"%{[fields][service_name]}-%{+YYYY.MM.dd}"
      } 
   }
}
wq!

先开启filebeat,开启logstash!

# nginx1      
cd /usr/local/filebeat
nohup ./filebeat -e -c filebeat.yml > filebeat.out &
------------------------------------------------------------------------------------------------------------
-e 输出到标准输出
-c 指定配置文件
nohup 在系统的后台运行,不会因为终端的关闭导致程序停止运行
      可以把运行的日志保存到指定文件
     
# test1-1
logstash -f http.conf --path.data /opt/test数字 &   # 创建一个/opt下没有的

filebeat作用:

1、可以在本机收集日志

2、也可以远程收集日志

3、轻量级的日志收集系统,可以在非java环境运行

logstash是在jvm环境中运行,资源消耗很大,启动一个logstash要消耗500M左右的内存,filebeat只消耗10M左右的内存

7、实验:在mysql上yum安装httpd和nginx、filebeat

mysql1-7 192.168.100.17

# mysql1-7

systemctl stop firewalld
setenforce 0
vim /etc/my.cnf
# 开启mysql二进制文件
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
wq!
systemctl restart mysqld

修改nginx或httpd的端口
curl 192.168.100.17:85     # 测试httpd访问,端口修改为85
curl 192.168.100.17        # 测试nginx访问
mysql -u root -p123456     # 测试mysqld访问

cd /opt   # 把filebeat-6.7.2-linux-x86_64.tar.gz的包拖进去
tar -xf filebeat-6.7.2-linux-x86_64.tar.gz
mv filebeat-6.7.2-linux-x86_64 /usr/local/filebeat
cd /usr/local/filebeat
cp filebeat.yml filebeat.yml.bak

修改filebeat.yml配置文件
vim filebeat.yml
- type: log
  enabled: true
  paths:
    - /etc/httpd/logs/access_log
    - /etc/httpd/logs/error_log
  tags: ["httpd"]
  fielsd:
     service_name:192.168.100.17_httpd
     log_type:httpd
     from:192.168.100.17
     
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
    - /var/log/nginx/error.log
  tags: ["nginx"]
  fielsd:
     service_name:192.168.100.17_nginx
     log_type:nginx
     from:192.168.100.17
     
- type: log
  enabled: true
  paths:
    - /usr/local/mysql/data/mysql_general.log
  tags: ["mysqld"]
  fielsd:
     service_name:192.168.100.17_mysqld
     log_type:mysqld
     from:192.168.100.17     
一直往下

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

#output.logstash:                 # 取消注释  output.logstash:
   # The Logstash hosts
   #hosts: ["localhost:5044"]     # 取消注释  hosts: ["192.168.100.11:5055"]

#5044是logstash默认的端口,只要是logstash主机上没有被占用的端口都可以,netstat -antp | grep 5055 查看一下
wq!


# test1-1 
cd /etc/logstash/conf.d
vim hnm.conf      #注意需要以.conf为结尾

input {
   beats { port => "5055"}
}

output {
   if "httpd" in [tags] {
      elasticsearch {
       hosts => ["192.168.100.12:9200","192.168.100.13:9200"]
      index =>"%{[fields][service_name]}-%{+YYYY.MM.dd}"
      }
   }
   if "nginx" in [tags] {
      elasticsearch {
       hosts => ["192.168.100.12:9200","192.168.100.13:9200"]
      index =>"%{[fields][service_name]}-%{+YYYY.MM.dd}"
      }     
   }        
   if "mysqld" in [tags] { 
      elasticsearch {
       hosts => ["192.168.100.12:9200","192.168.100.13:9200"]
      index =>"%{[fields][service_name]}-%{+YYYY.MM.dd}"
      } 
   }
}   
wq!

# mysql1-7
cd /usr/local/filebeat
nohup ./filebeat -e -c filebeat.yml > filebeat.out &

# test1-1
logstash -f hnm.conf --path.data /opt/test数字 &

# mysql1-7
tail -f filebeat.out

浏览器访问192.168.100.12:9100 和 192.168.100.12:9100。刷新,出现192.168.100.17_httpd-当前日期、192.168.100.17_nginx-当前日期、192.168.100.17_mysqld-当前日期

# kibana  
http://192.168.100.11:5601/
管理--索引模式--创建索引模式--索引模式--下一步--@timestamp--创建索引模式--discovery--访问httpd或者nginx或者mysqld:日志更新
相关推荐
运维&陈同学3 小时前
【Beats01】企业级日志分析系统ELK之Metricbeat与Heartbeat 监控
运维·elk·elasticsearch·云原生·kibana·heartbeat·metricbeat
幽弥千月3 天前
【ELK】ES单节点升级为集群并开启https【亲测可用】
elk·elasticsearch·https
IT猿手3 天前
基于PWLCM混沌映射的麋鹿群优化算法(Elk herd optimizer,EHO)的多无人机协同路径规划,MATLAB代码
算法·elk·机器学习·matlab·无人机·聚类·强化学习
流穿4 天前
ELK系列-(六)Redis也能作为消息队列?(下)
数据库·redis·ubuntu·elk·docker·容器
流穿4 天前
ELK系列-(五)指标收集-MetricBeat(下)
linux·运维·ubuntu·elk·docker·容器
流穿6 天前
ELK系列-(五)指标收集-MetricBeat(上)
ubuntu·elk·elasticsearch·docker
高hongyuan6 天前
Linux环境下 搭建ELk项目 -单机版练习
大数据·运维·服务器·elk·elasticsearch·搜索引擎
运维&陈同学7 天前
【Elasticsearch04】企业级日志分析系统ELK之Elasticsearch 插件
大数据·运维·后端·elk·elasticsearch·搜索引擎·全文检索·哈希算法
幽弥千月7 天前
【ELK】Filebeat采集Docker容器日志
elk·docker·容器
运维&陈同学8 天前
【Elasticsearch03】企业级日志分析系统ELK之Elasticsearch访问与优化
大数据·elk·elasticsearch·搜索引擎·云原生·全文检索·高可用