我刚刚开始使用 Docker 和 Richt,现在我正试图弄清楚如何设置我的第一个 dockerized Apache 2 / PHP 环境。到目前为止,我一直在使用完整的 Linux VM,其中我使用将日志文件写入 /var/log/apache2,然后每天使用“logrotate”跳转到一个新文件。
日志文件主要用于即时错误检测(即登录服务器并使用less 打开当前的access.log 和error.log 文件)和fail2ban。
如果我是对的,那在 Docker 环境中是不可行的——主要是因为您通常无法登录到容器来查看日志。如果容器被移除,日志也会丢失。
那么:在这种情况下,使用/模拟/替换 access.log/error.log 的最常用方法是什么?生产和开发环境的常见解决方案是什么?
到目前为止,我的想法包括使用 NFS 共享(速度慢,如果不小心可能会导致文件名冲突)和logstash(不确定它是否值得付出努力并且对于较小的站点甚至开发环境是否可行?)但我相信聪明的人有没有想出更好的解决方案?
不确定它是否有所作为,但目前我将我的 Docker 映像基于php:5.6-apache。
是否有任何不错的工具可以在远程(linux)服务器上执行“tail -f”?能够执行诸如“taillog server_host /var/log/syslog”之类的操作来查看各种服务器上的日志而无需 ssh 会很好。
并排显示多个日志的应用程序怎么样?
我们使用 tail 来连续监视多个日志,但是当日志旋转时,该文件的尾部将停止。
据我了解,问题是当日志轮换时,会创建一个新文件,而正在运行的尾部进程对该新文件句柄一无所知。
我有一个备份脚本,可以压缩各种文件和目录并创建 .tgz 档案。文件被命名,例如
...
backup_2010-10-28.tar.gz
backup_2010-10-29.tar.gz
backup_2010-10-30.tar.gz
backup_2010-10-31.tar.gz
backup_2010-11-01.tar.gz
Run Code Online (Sandbox Code Playgroud)
我想管理这些文件,以便只保留最后 5 个备份,并删除旧文件。
我可以使用 logrotate 来做到这一点吗?它们不是日志文件并且已经被压缩。它们位于 /root 而不是 /var/log - 我还能使用它吗?
谢谢
众所周知,“unix”可以在文件中包含除 '/' 和 '\0' 之外的任何内容,但是系统管理员的偏好要小得多,主要是因为不喜欢空格作为输入...... ':' 和 '@' 等的特殊含义。
最近我看到了另一个案例,在文件名中使用了时间戳,在玩了一些不同的格式以使其“更好”之后,我想我会尝试找到一种“最佳实践”,但没有看到我认为的我只是在这里问一下,看看人们是怎么想的。
可能的“常见”解决方案(p=prefix 和 s=suffix):
syslog/logrotate/DNS 类似格式:
p-%Y%m%d-suffix = prefix-20110719-s
p-%Y%m%d%H%M-suffix = prefix-201107191732-s
p-%Y%m%d%H%M%S-suffix = prefix-20110719173216-s
Run Code Online (Sandbox Code Playgroud)
优点:
缺点:
ISO-8601-格式
p-%Y-%m-%d-s = p-2011-07-19-s
p-%Y-%m-%dT%H:%M%z-s = p-2011-07-19T17:32-0400-s
p-%Y-%m-%dT%H:%M:%S%z-s = p-2011-07-19T17:32:16-0400-s
p-%Y-%m-%dT%H:%M:%S%z-s = p-2011-07-19T23:32:16+0200-s
Run Code Online (Sandbox Code Playgroud)
优点:
缺点:
RFC-3339 格式
p-%Y-%m-%d-s = p-2011-07-19-s
p-%Y-%m-%d %H:%M%:z-s = p-2011-07-19 17:32-04:00-s
p-%Y-%m-%d %H:%M:%S%:z-s = p-2011-07-19 17:32:16-04:00-s
p-%Y-%m-%d %H:%M:%S%:z-s …Run Code Online (Sandbox Code Playgroud)我有一堆想要分析的 Apache 日志文件。我正在寻找一种不需要太多设置的工具;我可以通过命令行运行日志,而无需在我们的实时 Web 服务器上乱搞。
有什么建议吗?
有人能说出这是什么意思吗?我尝试了一个命令,比如lastb查看上次用户登录,我看到一些来自中国的奇怪登录(服务器是欧盟,我在欧盟)。我想知道这些是否可能是登录尝试或成功登录?
这些似乎很旧,通常我只将端口 22 锁定到我的 IP,我想我的端口打开了一段时间,最后一次登录是在 7 月。
root ssh:notty 222.92.89.xx Sat Jul 9 12:26 - 12:26 (00:00)
root ssh:notty 222.92.89.xx Sat Jul 9 12:04 - 12:04 (00:00)
oracle ssh:notty 222.92.89.xx Sat Jul 9 11:43 - 11:43 (00:00)
gary ssh:notty 222.92.89.xx Sat Jul 9 11:22 - 11:22 (00:00)
root ssh:notty 222.92.89.xx Sat Jul 9 11:01 - 11:01 (00:00)
gt05 ssh:notty 222.92.89.xx Sat Jul 9 10:40 - 10:40 (00:00)
admin ssh:notty 222.92.89.xx Sat Jul 9 10:18 - 10:18 (00:00)
Run Code Online (Sandbox Code Playgroud) 使用 ASP.NET 会很好,但 PHP 也可以,并且应该托管在 IIS6 中。
编辑:日志来自我们的内部网站。
在我们的生产服务器上,根挂载点有一个小驱动器/,
/var/log占用了太多空间,我必须手动删除一些文件。我怎样才能/var/log/在/home/log不重新启动的情况下移动?
这是我想到的事情:
$ mkdir /home/log
$ rsync -a /var/log /home/log
$ mount --bind /home/log /var/log
$ /etc/init.d/rsyslof restart
Run Code Online (Sandbox Code Playgroud)
但我知道有些服务使用文件描述符,所以他们会继续使用/var/log或 inodes。
我在 Ubuntu 14.04 服务器上使用默认的 nginx 包。它用/etc/nginx/nginx.conf作主配置,然后包含来自/etc/nginx/conf.d/*.conf和 的配置/etc/nginx/sites-enabled/*。
默认的 nginx 配置有这个指令用于记录到访问日志
access_log /var/log/nginx/access.log;
我想添加 X-Forwarded-For 标头,所以我在conf.d文件夹内执行此操作:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,然后我在 access.log 文件中得到了两条记录——一条带有标题信息,另一条没有。
我知道我可以覆盖nginx.conf文件本身,但如果可能的话,我宁愿避免它。我还想继续使用相同的日志文件 ( access.log)。
有没有办法告诉 nginx 覆盖之前的指令并简单地更改日志格式而不修改主nginx.conf文件?