最近因公司项目增多,且环境也越来复杂,开发人员找我查看错误日志越来越频繁,心里便念想到ELK,心之所想,念之所达,快来get一项新技能吧

1、系统架构组成

  1. laravel日志:日志源通过filebeat将日志写进redis中间件
  2. logstsh:logstash通过input将redis数据拿来分析,通过其filter模块分析所需要的语句,然后输出到elasticsearch
    3.elasticsearch 接收logstash发送过来的数据,并提供了一个分布式多用户能力的全文搜索引擎
  3. Kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持。

二、各个服务的ip地址

laravel: 172.18.109.227
redis: 172.18.215.207
elasticsearch: 172.18.215.207
kibana: 172.18.215.207

三、laravel日志服务器配置:

  1. 配置filebeat yum源文件

    [elastic-5.x]
    name=Elastic repository for 5.x packages
    baseurl=https://artifacts.elastic.co/packages/5.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
  2. 安装filebeat
    yum install filebeat
  3. 配置filebeat配置文件
...
#写入源
- input_type: logpaths:- /var/www/html/*/storage/logs/laravel-2018-12-29.log
...
#输出至redis
output.redis:# Array of hosts to connect to.hosts: ["172.18.215.207:6379"]password: "***********"db: 0timeout: 5key: "php-01"#protocol: "https"#username: "elastic"#password: "changeme"

四、redis服务器

  1. 安装redis

    yum install redis
  2. 配置redis
...
# bind 192.168.1.100 10.0.0.1
bind 172.18.215.207
# bind 127.0.0.1 ::1
#
...
# are explicitly listed using the "bind" directive.
protected-mode yes# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379# TCP listen() backlog.
#
# In high requests-per-second environments you need an high backlog in order
# to avoid slow clients connections issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
tcp-backlog 511
...
# use a very strong password otherwise it will be very easy to break.
#
requirepass ***********# Command renaming.
#
# It is possible to change the name of dangerous commands in a shared
# environment. For instance the CONFIG command may be renamed into something
# hard to guess so that it

五、配置logstash服务器

  1. 配置logstash yum源

    [elasticsearch-5.x]
    name=Elasticsearch repository for 5.x packages
    baseurl=https://artifacts.elastic.co/packages/5.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
  2. logstash配置文件
#
# Where to fetch the pipeline configuration for the main pipeline
#
path.config: /etc/logstash/conf.d
#
# Pipeline configuration string for the main pipeline
#
# config.string:
#
...
path.config: /etc/logstash/conf.d
#
...
http.host: "127.0.0.1"
#
# Bind port for the metrics REST endpoint, this option also accept a range
# (9600-9700) and logstash will pick up the first available ports.
#
# http.port: 9600-9700
#
# ------------ Debugging Settings --------------
#
# Options for log.level:
#   * fatal
#   * error
#   * warn
#   * info (default)
#   * debug
#   * trace
#
# log.level: info
path.logs: /var/log/logstash
#
...vim /etc/logstash/conf.d/nginx.conf# 从redis将数据取出
input {redis {type => "php-01"host => "172.18.215.207"port => "6379"db => "0"password => "*************"data_type => "list"key => "php-01"}
}# 格式化laravel日志
filter {grok {match => [ "message","\[%{TIMESTAMP_ISO8601:logtime}\] %{WORD:env}\.(?<level>[A-Z]{4,5})\: %{GREEDYDATA:msg}}" ]}
}output {#过滤level为ERROR的日志if [level] == "ERROR" {elasticsearch {hosts => ["127.0.0.1:9200"]index => "laravellog"user => "elastic"password => "changeme"}}}

laravel的实例日志为

[2019-01-02 09:58:00] produce.INFO: {"code":200,"message":"成功","data":{"code":"1000","message":"成功"}}
[2019-01-02 10:00:03] produce.INFO: 不能充值的原因账户金额不够
[2019-01-02 10:00:03] produce.INFO: 不能充值的原因账户金额不够
[2019-01-02 10:00:03] produce.INFO: 不能充值的原因账户金额不够
[2019-01-02 10:00:34] produce.ERROR: cannot find user by this audience {"exception":"[object] (JPush\\Exceptions\\APIRequestException(code: 1011): cannot find user by this audience at /var/www/html/enjoyCarTask/vendor/jpush/jpush/src/JPush/Http.php:123)
[stacktrace]
#0 /var/www/html/enjoyCarTask/vendor/jpush/jpush/src/JPush/Http.php(16): JPush\\Http::proce***esp(Array)
#1 /var/www/html/enjoyCarTask/vendor/jpush/jpush/src/JPush/PushPayload.php(537): JPush\\Http::post(Object(JPush\\Client), 'https://api.jpu...', '{\"platform\":\"al...')
#2 /var/www/html/enjoyCarTask/vendor/ucar/push/Push/Jobs/JPush.php(89): JPush\\PushPayload->send()
#3 [internal function]: Ucar\\Push\\Jobs\\JPush->handle(Object(JPush\\Client))
#4 /var/www/html/enjoyCarTask/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#5 /var/www/html/enjoyCarTask/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#6 /var/www/html/enjoyCarTask/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#7 /var/www/html/enjoyCarTask/vendor/laravel/framework/src/Illuminate/Container/Container.php(564): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)

注意:我们只想把ERROR的信息提取出来,所以logstash的配置文件中把level 为ERROR的筛选了出来


六、配置elasticsearch服务器

  1. 配置elasticsearch yum源

    [elasticsearch-5.x]
    name=Elasticsearch repository for 5.x packages
    baseurl=https://artifacts.elastic.co/packages/5.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
  2. 安装elasticsearch
    yum install -y elasticsearch
  3. 配置elasticsearch
chown -R elasticsearch:elasticsearch /data/es-data
chown -R elasticsearch:elasticsearch /var/log/elsticvim /etc/elasticsearch/elasticsearch.yml
#
# Use a descriptive name for the node:
#
node.name: Elstic
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
# 数据路径
path.data: /data/es-data
## Path to log files:
#日志路径
path.logs: /var/log/elstic
...
# 监听地址,设置为127,只保持本机访问
network.host: 127.0.0.1
#
# Set a custom port for HTTP:
#
# 监听的端口
http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#

七、配置kibana服务

vim /etc/kibana/kibana.ym
# Kibana is served by a back end server. This setting specifies the port to use.
# 监听的端口
server.port: 5601# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
# 监听地址,使用内网地址,然后用nginx反代
server.host: "127.0.0.1"# Enables you to specify a path to mount Kibana at if you are running behind a proxy. This only affects
# the URLs generated by Kibana, your proxy is expected to remove the basePath value before forwarding requests
# to Kibana. This setting cannot end in a slash.
#server.basePath: ""# The maximum payload size in bytes for incoming server requests.
#server.maxPayloadBytes: 1048576# The Kibana server's name.  This is used for display purposes.
#server.name: "your-hostname"# The URL of the Elasticsearch instance to use for all your queries.
elasticsearch.url: "http://localhost:9200"# When this setting's value is true Kibana uses the hostname specified in the server.host
# setting. When the value of this setting is false, Kibana uses the hostname of the host
# that connects to this Kibana instance.
#elasticsearch.preserveHost: true# Kibana uses an index in Elasticsearch to store saved searches, visualizations and
# dashboards. Kibana creates a new index if the index doesn't already exist.
#kibana.index: ".kibana"# The default application to load.
....

八、使用nginx反代kibana

$ cat /etc/nginx/conf.d/elk.conf
server {listen 443 http2 ssl;listen [::]:443 http2 ssl;server_name *********;ssl on;ssl_certificate "**************";ssl_certificate_key "/usr/local/certificate/************";ssl_session_cache shared:SSL:1m;ssl_session_timeout  10m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_prefer_server_ciphers on;#ssl_dhparam /etc/ssl/certs/dhparam.pem;######################################################################### from https://cipherli.st/                                            ## and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html ########################################################################## Disable preloading HSTS for now.  You can use the commented out header line that includes# the "preload" directive if you understand the implications.#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";add_header X-Frame-Options DENY;add_header X-Content-Type-Options nosniff;################################### 这里是反向代理到kibana服务 走http协议location / {proxy_pass   http://127.0.0.1:5601;}
}#配置80端口重写443端口
server {listen 80;server_name *********;rewrite ^/(.*)$ https://*********/$1;
}

九、访问kibana配置索引


启动所以服务后再次访问kibana,查看效果。


大功告成~,以后可以让开发自己看错误日志咯


总结:

  • 此次因为服务器数量有限,(不敢在正式服务器上乱搞= =)只使用了两台服务器,php的laravel日志和filebeat服务一台,作为写入源,Redis,Elasticsearch、Logstash、Kibana,一台作为日志处理服务器,(如果做多台的话,监听地址需要改变)。跑一段时间确认没问题再上正式。
  • 监听的地址最好都使用内网地址,防止被***。

喜欢我写的东西的朋友可以关注一下我的公众号:Devops部落

转载于:https://blog.51cto.com/dashui/2337767

ELK实时分析之php的laravel项目日志相关推荐

  1. 制作一个BearyChat的Laravel项目错误日志通知机器人

    本文最早发表于本人博客: 制作一个BearyChat的Laravel项目错误日志通知机器人 Laravel 集成 Monolog 来做日志处理,Monolog非常强大,也容易扩展,其实它本身已经支持很 ...

  2. 2021年大数据ELK(一):集中式日志协议栈Elastic Stack简介

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.简介 二.ELK 协议栈介绍及体系结构 三.集中式日志协议栈 ...

  3. legend3---Homestead中Laravel项目502 Bad Gateway

    legend3---Homestead中Laravel项目502 Bad Gateway 一.总结 一句话总结: 用查看错误日志的方法解决错误:(/var/log/nginx/.log) 1.home ...

  4. laravel翻看php日志,关于Laravel的日志用法

    这篇文章主要介绍了Laravel日志用法,结合实例形式较为详细的分析了Laravel日志的功能.定义.使用方法与相关注意事项,需要的朋友可以参考下 本文实例讲述了Laravel日志用法.分享给大家供大 ...

  5. Laravel 项目开发规范

    一. 说明 以下内容大部分引用Laravel China社区的文章 - 分享下团队的开发规范 --<Laravel 项目开发规范>. 相对而言,上面引用的文章的规范更加严格,但考虑到目前的 ...

  6. 使用ELK实时分析SSH暴力破解

    这是ELK入门到实践系列的第二篇文章,分享如何使用ELK实时分析SSH暴力破解.从一张图看出SSH登录时间.登录状态.用户名字典,尝试次数.来源IP等,可洞悉SSH暴力破解,迅速定位攻击者. 安全日志 ...

  7. docker + laravel项目使用elasticsearch进行全文检索功能

    Laravel项目使用Elasticsearch进行全文检索功能 博主用的是mac + docker,所以就用docker进行讲解 只需五步骤: • 启动 集成 ik 中文分词插件的 Elastics ...

  8. 【ELK】ELK菜鸟手记 (一) 环境配置+log4j日志记录——转自Master HaKu

    感谢Master HaKu的分享,博客园的账号忘了,文章里面有原文链接,尊重原创 ELK菜鸟手记 (一) 环境配置+log4j日志记录 - Master HaKu - 博客园 Master HaKu ...

  9. 从零学ELK系列(十):SpringBoot项目接入ELK升级版(超详细图文教程)

    前言 之前在<从零学ELK系列(八):SpringBoot项目接入ELK(超详细图文教程)>中演示了SpringBoot项目接入ELK,后来项目中对这部分进行了优化,之前博文中也有读者问到 ...

最新文章

  1. Shuffle 相关
  2. php根据时间段分组,php按月分组(时间戳)
  3. 【LaTeX】E喵的LaTeX新手入门教程(3)数学公式
  4. 一个write和printf混用的例子
  5. requests模拟登陆 验证码
  6. 【转】图形学基础之透视校正插值
  7. jmeter连接MySQL出错_MySQL数据库之jmeter连接mysql数据库报错Cannot create PoolableConnectionFactory...
  8. PHP mongodb运用,MongoDB在PHP下的应用学习笔记
  9. 给恋爱中的女孩的忠告
  10. mapbox 加载json数据 和数据中颜色 和高度 并根据数值加载颜色
  11. windows下运用git bash 通过ssh方式连接到git server
  12. 网易云音乐encseckey算法php,网易云音乐热评api
  13. c语言常量指针和指针常量
  14. [虚树模板] 洛谷P2495 消耗战
  15. three.js实现世界3d地图
  16. 电梯plc的io分配_三菱Q系列PLC的io分配
  17. 短信网关通道对接及分流策略说明
  18. 【正点原子Linux连载】第二十章 V4L2摄像头应用编程-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1
  19. matlab飞机大战小游戏(第二版)
  20. IMX6UL eMMC命令分析

热门文章

  1. TensorFlow基础笔记(7) 图像风格化效果与性能优化进展
  2. BYOD革命挑战企业IT安全
  3. 笨办法学 Python · 续 第五部分:文本解析
  4. 树莓派:一个关于教育的故事
  5. SQL:插入指定标识列的数据时候的小错误
  6. MySQL导入.sql文件及常用命令
  7. 组合查询——怎样使用窗口的继承达到事半功倍?
  8. Deformable ConvNets--Part2: Spatial Transfomer Networks(STN)
  9. 2019.03.10----LINUX学习笔记
  10. Siri ShortCut 调研(含Demo)