ELK7.4.0单节点部署

环境准备

  • 安装系统,数据盘设置为/srv

  • 内核优化参考

  • 我们需要创建elk专用的账号,并创建所需要的目录并授权

useradd elk;
mkdir /srv/{app,data,logs}/elk
chown -Rf elk:elk /srv/{app,data,logs}/elk
  • 修改/etc/security/limits.conf
*  soft  nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536 elk soft nofile 65536
elk hard nofile 65536
elk soft nproc 65536
elk hard nproc 65536

安装elk过程所有操作必须使用elk账户进行!

su - elk

Elasticsearch

这次先用的是单节点的ES,没有部署集群,集群部署的后续会更新

首先我们需要从官网下载最新的es安装包,这里建议使用tar包安装;

cd /srv/app/elk;
wget http://172.19.30.116/mirror/elk/elasticsearch/7.4.0/elasticsearch-7.4.0-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz
mv elasticsearch-7.4.0-linux-x86_64.tar.gz elasticsearch
  • 修改es的配置文件/srv/app/elk/elasticsearch/config/elasticsearch.yml
cluster.name: es-cluster
node.name: es-1
node.master: true #允许为master节点
node.data: true #允许为数据节点
path.data: /srv/data/elk/elasticsearch #设置数据目录
path.logs: /srv/logs/elk/elasticsearch #设置日志目录 network.host: 127.0.0.1 #仅允许本地访问,如要其它网段访问,可以设置为网段地址,也可以直接写成0.0.0.0
http.port: 9200 #http端口,默认为9200 http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.enabled: false
  • JVM内存我给了4G,查询的量也比较小,小一点没关系,根据使用情况来看,es7.4.0版本比较耗费内存
-Xms4g
-Xmx4g
/srv/app/elk/elasticsearch/bin/elasticsearch -d

Kibana

cd /srv/app/elk;
wget http://172.19.30.116/mirror/elk/kibana/7.4.0/kibana-7.4.0-linux-x86_64.tar.gz
tar -zxvf kibana-7.4.0-linux-x86_64.tar.gz
mv kibana-7.4.0-linux-x86_64 kibana
  • 修改kafka的配置文件 ``
server.port: 5601
server.host: "localhost" #也可以直接写成0.0.0.0
server.name: "kibana"
elasticsearch.hosts: ["http://127.0.0.1:9200"]
i18n.locale: "en" #如果要开启中文可以改成zh-CN
/srv/app/elk/kibana/bin/kibana

logstash

cd /srv/app/elk;
wget http://172.19.30.116/mirror/elk/logstash/7.4.0/logstash-7.4.0.tar.gz
tar -zxvf logstash-7.4.0.tar.gz
mv logstash-7.4.0 logstash
  • 根据实际情况修改jvm /srv/app/elk/logstash/config/jvm.options; 默认1G,如果日志的数量比较大,可以改成2G或者更多
-Xms1g
-Xmx1g

至此,ELK集群已经部署完成了,现在我们需要准备我们的Redis和filebeat了,redis用来做日志的暂存队列,filebeat收集nginx或者其他应用的日志

REDIS

yum install epel-release -y
yum install redis* -y
chkconfig redis on
service redis start

Filebeat

在nginx节点上安装filebeat,修改nginx的log_format,新增nginxjson,并让日志引用这个格式的日志,可以参考这篇博客:

log_format nginxjson '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"service":"nginx",'
'"trace":"$upstream_http_ctx_transaction_id",'
'"clientip":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"url":"$scheme://$http_host$request_uri",'
'"http_user_agent":"$http_user_agent",'
'"server_protocol":"$server_protocol",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"x_clientOs":"$http_x_clientOs",'
'"x_access_token":"$http_x_access_token",'
'"referer":"$http_referer",'
'"status":"$status"}';
rpm -ivh http://172.19.30.116/mirror/elk/filebeat/7.4.0/filebeat-7.4.0-x86_64.rpm
chkconfig filebeat on

修改filebeat的配置/etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/nginx_access.log
tags: ["nginx-access"]
document_type: json-nginxaccess
tail_files: true filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
setup.kibana: output.redis:
enabled: true
hosts: ["192.168.1.1:7000"] #这里的是自定义的REDIS服务器IP,redis端口默认是6379,请根据自己的情况修改
port: 7000
key: nginx
db: 0
datatype: list

现在我们反过来配置logstash

mkdir /srv/app/elk/logstash/config/conf.d
vim /srv/app/elk/logstash/config/conf.d/nginx-logs.conf

写入以下内容

input {
redis {
host => "192.168.1.1"
port => "7000"
key => "nginx"
data_type => "list"
threads => "5"
db => "0"
}
} filter {
json {
source => "message"
remove_field => ["beat"]
} geoip {
source => "clientip"
} geoip {
source => "clientip"
target => "geoip"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
} grok {
match => ["message","%{TIMESTAMP_ISO8601:isotime}"]
}
date {
locale => "en"
match => ["isotime","ISO8601"]
target => "@timestamp"
}
mutate {
convert => [ "[geoip][coordinates]", "float"]
# remove_field => ["message"]
}
} output {
if "nginx-access" in [tags] {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "logstash-nginx-logs-%{+YYYY.MM.dd}"
}
}
}
/srv/app/elk/logstash/bin/logstash -f  /srv/app/elk/logstash/config/conf.d/nginx-logs.conf

后记

  • Nginx代理kibana访问,方便添加http认证

主要的配置如下:

server {
listen 80;
server_name kibana;
access_log off;
error_log off; location / {
auth_basic "Kibana";
auth_basic_user_file /srv/app/tengine/conf/conf.d/passwd;
proxy_pass http://127.0.0.1:5601;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
  • 添加账户的脚本/srv/app/tengine/conf/conf.d/adduser.sh
#!/bin/bash
read -p "请输入用户名: " USERNAME
read -p "请指定用户密码: " PASSWD
printf "$USERNAME:$(openssl passwd -crypt $PASSWD)\n" >> passwd

最新文章

  1. 马后炮之12306抢票工具(四)--抢票Demo,2014年1月9日终结版
  2. Android LitePal 神一般的数据库框架 超级好用
  3. HashSet
  4. js制作简单的计算器
  5. 冲刺一 (Day 2)
  6. 修改APK包并push到system/app路径下安装
  7. 转 :meta name的含义:<META http-equiv=Content-Type content="text/html; charset=gb2312">
  8. 浏览器兼容性小记-DOM篇(一)
  9. 两种写法实现Session Scope的Spring Bean
  10. Linux-学习patch命令打补丁,diff命令制作补丁(3)
  11. UVA - 1456 Cellular Network
  12. 编译器处理警告、错误 #pragma GCC diagnostic ignored "-Wunused"
  13. python load mat
  14. 前端工程构建工具之Yeoman
  15. laravel 辅助函数
  16. c primer plus(五版)编程练习-第六章编程练习
  17. 浅探SpringMVC中HandlerExecutionChain之handler、interceptor
  18. 数据结构与算法JavaScript描述——使用队列
  19. STM32的备份寄存器和控制状态寄存器
  20. 010. VS2015创建MVC项目

热门文章

  1. Python之常用模块三(面向对象相关的三个模块)
  2. 关于react中context的使用
  3. 对js数组去重的研究
  4. python导入不同目录下的自定义模块
  5. vsftp配置文件
  6. Sdoi2017试题泛做
  7. Javascript高级程序设计第三版-笔记
  8. YOLO_V2
  9. Windows10 + VS2015 环境下对gdal2.0.1进行64bit编译小结
  10. 综合KPI报表历史明细数据查询