目录
频道首页
📚 ELK
收藏
0
xy20118 最近修改于 2024-07-16 22:40:47

前言

通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业级解决方案,在这三个软件当中,每个软件用于完成不同的功能,ELK 又称为ELK stack,官方域名为 elastic.co,ELK stack 的主要优点有如下几个:处理方式灵活: elasticsearch 是实时全文索引,具有强大的搜索功能配置相对简单:elasticsearch 的 API 全部使用 JSON 接口,logstash 使用模块配置,kibana 的配置文件部分更简单。检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。集群线性扩展:elasticsearch 和 logstash 都可以灵活线性扩展前端操作绚丽:kibana 的前端设计比较绚丽,而且操作简单

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

搜索、支持分布式可实现高可用、提供 API 接口,可以处理大规模日志数据,比如 Nginx、Tomcat、系统日志等功能。

Elasticsearch 使用 Java 语言开发,是建立在全文搜索引擎 Apache Lucene 基础之上的搜索引擎,https://lucene.apache.org/。

Elasticsearch 的特点:

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

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

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

搭建环境

1.安装Elasticsearch 64.10和64.18

[root@localhost ~]# java -version
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)
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0 
cd /opt
#上传软件包
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

cluster.name: my1
#群集名称
node.name: node1
#节点名称 不能和主节点重复
node.master: true
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
#内存锁开启  禁止使用  swap
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.64.18:9300", "192.168.64.10:9300"] 
#自动集群发现,加入主机名  使用单播 类似心跳线
#

2.系统调优

vim /etc/security/limits.conf

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

修改systemd服务器 在页面最后修改

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity` 

systemctl enable elasticsearch.service
netstat -antp | grep 9200

vim /etc/sysctl.conf

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity 

--------------------------------------------------------------------

/etc/systemd/system.conf 文件是用于配置 systemd 的,这是一种用于 Linux 操作系统的系统和服务管理器。通过这个文件,你可以自定义与系统操作、性能和行为相关的各种设置
- DefaultTimeoutStartSec=:设置启动服务的默认等待时间
- DefaultTimeoutStopSec=:设置停止服务的默认等待时间
- DefaultRestartSec=:设置在重新启动服务之前的默认休眠时间
- DefaultLimitNOFILE=:设置打开文件数量的默认限制
- DefaultLimitNPROC=:设置进程数量的默认限制
- DefaultLimitCORE=:设置核心文件大小的默认限制
- DefaultEnvironment=:指定服务的默认环境变量


---------------------------------------------------------------------
#重启服务器
reboot
systemctl enable elasticsearch.service
netstat -antp | grep 9200

浏览器访问

http://192.168.64.18:9200/ 
http://192.168.64.10:9200/

---------------------------------
http://192.168.64.18:9200/_cluster/health?pretty

image

可以使用插件Elasticsearch-head 查看

image

3.编译安装node组件

#node-v8.2.1.tar.gz 上传之opt
yum install gcc gcc-c++ make -y
cd /opt
tar zxvf node-v8.2.1.tar.gz

cd node-v8.2.1/
./configure
make && make install

4.安装 phantomjs

注:如果已经安装插件 可以不用编译安装此软件

elasticsearch-head-master.zip 到/opt 
cd /opt
unzip elasticsearch-head-master.zip
cd /opt/elasticsearch-head/
#安装依赖包
npm install  
---------------------------------------------------------------------
出现报错请求连接npm源失败 可以ping一下域名 可能是服务器不通  可以重新改一下DNS重新试一下。

---------------------------------------------------------------------

vim /etc/elasticsearch/elasticsearch.yml 
--末尾添加以下内容--
http.cors.enabled: true                #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"            #指定跨域访问允许的域名地址为所有


http.cors.enabled: true
http.cors.allow-origin: "*"    

systemctl restart elasticsearch
#重启服务 使配置生效 

5.启动 elasticsearch-head 服务

#注意:需要在此目录下执行启动
[root@xyy10 opt]# cd elasticsearch-head-master/

npm run start & 
[root@xyy10 elasticsearch-head-master]#
> elasticsearch-head@0.0.0 start /opt/elasticsearch-head-                            master
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
[root@xyy10 elasticsearch-head-master]# ss -natp |grep 91                            00
LISTEN     0      128          *:9100                                                 *:*                   users:(("grunt",pid=49891,fd=12))

验证: 插件中输入测试

image

插入索引测试:

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

-x 指定方法
-H 添加请求头
-d 请求体

curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
  "_index" : "index-demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

刷新插件后 可以看见新的数据 image

6.在apache应用服务器上部署 Logstash 64.11

安装服务

yum -y install java
java -version
yum -y install httpd
systemctl start httpd

安装logstash

#上传二进制包到opt
cd /opt
rpm -ivh logstash-6.7.2.rpm                          

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

#做软链接
ln -s  /usr/share/logstash/bin/logstash   /usr/bin/

使用logstash

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

logstash -e 'input { stdin{} } output { stdout{} }' 
[INFO ] 2024-07-16 16:02:22.313 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>     9600}
hello world  #此位置输入任何内容 
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_fo     rmatter.rb:31: warning: constant ::Fixnum is deprecated
{
    "@timestamp" => 2024-07-16T08:02:32.670Z,
      "@version" => "1",
       "message" => "hello wordhello world",
          "host" => "xyy7"
}

使用 Logstash 将信息写入 Elasticsearch 中

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.64.10:9200","192.168.64.18:9200"]} }'
[INFO ] 2024-07-16 00:50:12.096 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
# 输入信息
www.xx.com
hello world

image

6.1在ngin服务器上部署logstash

nginx编译安装

[root@xyy1 ~]# yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel 
[root@xyy1 opt]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@xyy1 opt]# tar zxvf nginx-1.18.0.tar.gz
[root@xyy1 opt]# cd nginx-1.18.0/
[root@xyy1 nginx-1.18.0]# ./configure --prefix=/apps/nginx \
> > --user=nginx \
> > --group=nginx \
> > --with-http_ssl_module \
> > --with-http_v2_module \
> > --with-http_realip_module \
> > --with-http_stub_status_module \
> > --with-http_gzip_static_module \
> > --with-pcre \
> > --with-stream \
> > --with-stream_ssl_module \
> > --with-stream_realip_module
[root@xyy1 nginx-1.18.0]# make -j4 && make install 
useradd -M  -s /sbin/nologin nginx  
[root@xyy1 nginx-1.18.0]# chown -R nginx.nginx /apps/nginx
[root@xyy1 nginx-1.18.0]# vim /etc/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
#注意文件位置,绝对路径 错误启动不了
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

[root@xyy1 nginx-1.18.0]# systemctl daemon-reload
[root@xyy1 nginx-1.18.0]# systemctl start nginx.service
[root@xyy1 nginx-1.18.0]# systemctl status nginx

#####################################################################

#修改nginx配置文件 日志格式需要变更为json格式
#日志位置需要先查看 一会需要用到
[root@xyy1 logs]# pwd 
/apps/nginx/logs
[root@xyy1 logs]# vim /apps/nginx/conf/nginx.conf
#修改在http模块
log_format json '{'
        '"timestamp": "$time_local",'
        '"remote_addr": "$remote_addr",'
        '"request": "$request",'
        '"status": $status,'
        '"body_bytes_sent": $body_bytes_sent,'
        '"http_referer": "$http_referer",'
        '"http_user_agent": "$http_user_agent",'
        '"http_x_forwarded_for": "$http_x_forwarded_for"'
        '}';
    #access_log  logs/access.log  main;
     access_log /apps/nginx/logs/access.log json;
#重启nginx服务
[root@xyy1 opt]# systemctl restart nginx.service 

image

安装logstash后使用

[root@xyy1 opt]# logstash -e 'input { stdin{} } output { stdout{} }' 
[INFO ] 2024-07-16 16:41:13.251 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>
hello world
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_foer.rb:31: warning: constant ::Fixnum is deprecated
{
          "host" => "xyy1",
      "@version" => "1",
       "message" => "hello world",
    "@timestamp" => 2024-07-16T08:41:29.065Z
}
[root@xyy1 opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.64.10:9200","192.4.18:9200"]} }'
#可能会有error日志的报错 因为未设置  
[INFO ] 2024-07-16 16:43:46.209 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>
wolegequ.com
^C[WARN ] 2024-07-16 16:44:21.949 [SIGINT handler] runner - SIGINT received. Shutting down. 

image

7.安装使用kibana

rpm -ivh kibana-6.7.2-x86_64.rpm

 cp kibana.yml  kibana.yml.bak -a

[root@localhost kibana]# vim kibana.yml

2            server.port: 5601                  #打开端口
7    server.host: "0.0.0.0"          #监听端口
28   elasticsearch.hosts: ["http://192.168.64.10:9200", "http://192.168.64.18:9200"]  #el服务器地址
37   kibana.index: ".kibana"         #打开索引
96   logging.dest: /var/log/k.log      #指定日志文件, 需要手动建立文件
114  i18n.locale: "zh-CN"              #中文设置
root@xyy7 kibana]# cd /var/log/ 
touch k.log 
chown kibana:kibana /var/log/k.log 
systemctl enable --now kibana.service 
[root@xyy7 log]# ss -natp |grep 5601
LISTEN     0      511          *:5601                     *:*                   users:(("node",pid=64708,fd=19)) 

浏览器访问:IP:5601

image image image

内容大纲
批注笔记
📚 ELK
ArticleBot
z
z
z
z
主页
会议室
Git管理
文章
云文档
看板