Bootstrap

ELK日志收集

一、什么是ELK

ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业级解决方案。

ELK 的好处:

ELK 组件在大数据运维系统中,主要可解决的问题如下:

  • 日志查询,问题排查,故障恢复,故障自愈
  • 应用日志分析,错误报警
  • 性能分析,用户行为分析

二、Elasticsearch

是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索
Elasticsearch 的特点:

  • 实时搜索、实时分析
  • 分布式架构、实时文件存储
  • 文档导向,所有对象都是文档
  • 高可用,易扩展,支持集群,分片与复制
  • 接口友好,支持 json

三、Logstash

Logstash 是一个具有实时传输能力的数据收集引擎,其可以通过插件实现日志收集和转发,支持日志过滤,支持普通 log、自定义 json 格式的日志解析,最终把经过处理的日志发送给 elasticsearch。

四、kibana

Kibana 为 elasticsearch 提 供 一 个 查 看 数 据 的 web 界 面 , 其 主 要 是 通 过elasticsearch 的 API 接口进行数据查找,并进行前端数据可视化的展现,另外还可以针对特定格式的数据生成相应的表格、柱状图、饼图等。

安装部署ELK

node1节点(2C/4G):node1/192.168.91.100					Elasticsearch
node2节点(2C/4G):node2/192.168.91.101					Elasticsearch
Apache节点:       apache/192.168.91.103				 Logstash  Kibana  Apache

前期准备:java环境,关闭防火墙

java -version										#如果没有安装,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

systemctl disable  --now   firewalld
setenforce 0
sed -i.bak 's/SELINUX=enforcing/SELINUX=disabled/'  /etc/selinux/config

1.安装 Elasticsearch 软件

ls
elasticsearch-6.7.2.rpm  elasticsearch-head-master.zip  node-v8.2.1.tar.gz  phantomjs-2.1.1-linux-x86_64.tar.bz2

rpm -ivh elasticsearch-6.7.2.rpm
#cd /etc/elasticsearch/
mkdir bak 
cp -a *.yml  bak/
#备份

修改配置文件

vim elasticsearch.yml

17 cluster.name: my-elk-cluster
#修改集群名字



23 node.name: node1
24 node.master: true
25 node.data: true
#设置 节点名称 主从之间不能一致    24作为主节点   25作为数据节点



45 bootstrap.memory_lock: true
#内存锁开启  禁止使用  swap




59 network.host: 0.0.0.0
#监听地址
60 http.port: 9200
#  默认使用端口
61 transport.tcp.port: 9300
#内部传输端口



73 discovery.zen.ping.unicast.hosts: ["192.168.91.100:9300", "192.168.91.101:9300"]
#自动集群发现,加入主机名  使用单播 类似心跳线


grep -v "^#"  elasticsearch.yml 
cluster.name: my-elk-cluster
node.name: node1
node.master: true
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 0.0.0.0 
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.91.100:9300", "192.168.91.101:9300"]

修改系统配置

vim /etc/security/limits.conf

  soft    nofile          65536
*  hard    nofile          65536
*  soft    nproc           32000
*  hard    nproc           32000
*  soft    memlock         unlimited
*  hard    memlock         unlimited

vim /etc/sysctl.conf
#一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)
vm.max_map_count=262144

sysctl -p
sysctl -a | grep vm.max_map_count

修改systemd 服务管理器

vim /etc/systemd/system.conf

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

重启服务器 启动 elasticsearch

reboot
systemctl start elasticsearch.service
systemctl enable elasticsearch.service
netstat -antp | grep 9200

查看节点信息

浏览器访问  
http://192.168.91.100:9200  
http://192.168.91.101:9200 
查看节点 Node1、Node2 的信息。

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


浏览器访问 http://192.168.91.100:9200/_cluster/state?pretty  检查群集状态信息

安装谷歌插件
请添加图片描述
请添加图片描述
请添加图片描述
2.在应用服务器部署 Logstash

cd /opt
[root@localhost opt]#  rpm -ivh logstash-6.7.2.rpm                          

#开启服务
systemctl enable --now logstash.service

[root@localhost opt]# ln -s  /usr/share/logstash/bin/logstash   /usr/bin/
# 做软连接

Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。

使用 Logstash 将信息写入 Elasticsearch 中

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.91.100:9200","192.168.91.101:9200"]} }'
#结果不在标准输出显示,而是发送至 Elasticsearch 中
#可浏览器访问http://192.168.91.100:9100/ 查看索引信息和数据浏览。

............................
[INFO ] 2024-07-16 00:50:12.096 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
# 输入信息
www.kgc.com
hello world

请添加图片描述
使用Logstash配置文件
Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)

  • input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
    file beats kafka redis stdin

  • filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
    grok 对若干个大文本字段进行再分割成一些小字段 (?<字段名>正则表达式) 字段名: 正则表达式匹配到的内容
    date 对数据中的时间格式进行统一和格式化
    mutate 对一些无用的字段进行剔除,或增加字段
    mutiline 对多行数据进行统一编排,多行合并或拆分

  • output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。
    elasticsearch stdout

vim /etc/logstash/conf.d/system-log.conf 

input {
    file {
      path => "/var/log/messages"
      type => "system"
      start_position => "beginning"
    }


}

output {
  elasticsearch {
  hosts => [ "192.168.91.100:9200","192.168.91.101:9200" ]
  index => "system-%{+YYYY.MM.dd}"
  }

}



chmod +r /var/log/messages 
#添加权限

logstash   -f  system-log.conf 
#启动logstash
........................................................................
[INFO ] 2024-07-16 01:02:41.716 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9601}

3.安装 kibana

rpm -ivh kibana-6.7.2-x86_64.rpm 

cd  /etc/kibana/
cp kibana.yml  kibana.yml.bak -a

vim kibana.yml

2   		 server.port: 5601          		#打开端口
7    server.host: "0.0.0.0"      	#监听端口
28   elasticsearch.hosts: ["http://192.168.91.100:9200", "http://192.168.91.101:9200"]  #el服务器地址
37   kibana.index: ".kibana"         #打开索引
96   logging.dest: /var/log/k.log      #指定日志文件, 需要手动建立文件
114  i18n.locale: "zh-CN"              #中文设置

chown kibana:kibana /var/log/k.log

systemctl enable --now kibana.service
ss -nap |grep 5601
tcp    LISTEN     0      128       *:5601                  *:*                   users:(("node",pid=42235,fd=19))

192.168.91.102:5601
#浏览器访问测试

请添加图片描述

;