質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
uWSGI

uWSGIは、PythonでWebサービスを動かすアプリケーションサーバの一つです。WSGI(Web Server Gateway Interface)アプリケーションコンテナの一種で、WSGIに則ったDjangoやFlaskなどで動かすことができます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

516閲覧

nginx + uWSGIでエラーログを確認したい。なぜかエラーログに表示されていません。

wozniac777

総合スコア5

uWSGI

uWSGIは、PythonでWebサービスを動かすアプリケーションサーバの一つです。WSGI(Web Server Gateway Interface)アプリケーションコンテナの一種で、WSGIに則ったDjangoやFlaskなどで動かすことができます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2024/07/08 03:04

実現したいこと

とても初歩的な質問で申し訳ございません。かなり調べたのですが分かりませんでした。

タイトルに書かれているようにnginx + uWSGIでエラーログを確認したいです。

nginx + uWSGIサーバーで運用しているのですが、何か少しでもエラーがあるとインターナルサーバーエラーの表示のみでデバッグに非常に苦労しています。

発生している問題・分からないこと

■インターナルエラー①
ローカル環境で編集し、新たにpyファイルを作成したのですが、それをアップロードし忘れて、from フォルダ名.ファイル名 import ファイル名の部分で問題が発生していました。ローカル環境なら親切にエラーが出されてすぐに分かるのですが、サイトにはinternal server errorのみの表示となっています。そこでエラーログになら書かれているはずと思い、確認したのですがそのエラーの部分は全く書かれていませんでした。

■インターナルエラー②
エラーが出ていたコード
class クラス名():
def timestamp(self,foldername, filename):
・・・・・・

改善後のコード
class クラス名(object):※objectを追加
def timestamp(self,foldername, filename):
・・・・・・

このようなちょっとしたエラーですらもエラー箇所を突き止めるだけで物凄く苦労しています。2つ目のエラーは「シリコンバレー一流プログラマーが教えるPythonプロフェッショナル大全」にはobjectを書かなくても良いみたいなことが書かれていたのですが、エラーで止まってしまっていました。設定がおかしいのかはちょっと分かりません。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

エラーログの確認方法として次のようにしました。

cd /var/log/nginx

tail -n 100 error.log

tail -n 100 access.log

また、uwsgiの場合は

cd /var/log/uwsgi

ls

app_uwsgi.log emperor.log  エラーログが無く、この2つのファイルを見てもエラーは書かれていないようです。

/etc/nginx/nginx.confにはエラー設定が以下のようになっています。
error_log /var/log/nginx/error.log warn;

warn以上のエラーは出力されるようになっているはずなのですが、どこを見て問題解決をしていいものか分かりません。地道に1行ずつ追加して、エラーの行を見つけている状況です。どなたかご教授頂けるとありがたいです。どうぞ、よろしくお願いいたします。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2024/07/08 06:51

nginxもuwsgiもWeb経由でアプリケーションにアクセスする仕組みであり、アプリケーションではありません。どんなフレームワークを使ったどういうアプリケーションなのかの説明が必要です。またnginxもuwsgiを挙げいるならその設定すら書いていないのはどういうことでしょう? さらに、そもそもアプリケーション内でエラー(というか)バグがあって落ちたということですか? この程度のことが理解できていないのでは、正直インターネット公開どころか、この質問をすること自体がまだ早い気がします。フレームワーク単体でアプリをよく動かして正確な理解をした上で、まともな質問が出来るようになったらまた質問してください。
wozniac777

2024/07/08 10:30

フレームワークはFlaskを利用しております。エラー内容がフレームワークに影響するとは考えておりませんでした。理解不足で申し訳ありません。 >この程度のことが理解できていないのでは、正直インターネット公開どころか、この質問をすること自体がまだ早い気がします。 インターネット公開は遠の昔にしておりますし、恥ずかしながらプログラミングは始めて12年くらいになります。本業が塾の経営でなかなか、プログラミングが出来ておらず、「クライアントサイド」のコードばかりを書いていたので「サーバーサイド」はほとんど利用してきませんでした。 デバッグを繰り返すことで成長していけると思っています。 そのデバッグが出来ない状況なので、初歩的な質問かもしれませんが、調べても分かりませんでしたのでご教授していただける方を探しています。 あなたにとっては質問をする資格がないかもしれませんが、親切に教えてくださる方もいるかもしれませんので、質問は残させてください。出先ですので、開発環境など詳しいことは追記します。 アプリケーションは予約システムになります。アプリは完成して既に公開し、正常に動作しています。ローカル環境ではエラーが表示されるため、作れていますがサーバーに上げたとたん、インターナルサーバーエラーだけの表示で戸惑っております。エラーログなども探してみていますが、必要なエラーが書かれていませんでした。
退会済みユーザー

退会済みユーザー

2024/07/08 12:12

年数ではありません。インターネット公開はやめたほうがいいと思います。質問するときに必要な情報の記載が足りていないので、あまりにも理解が足りていないと言っています。私はこれ以上付き合いませんが、長文書く暇があったら、必要な情報を書きましょう。
mike2mike4

2024/07/08 12:36

怪しそうなのは、 ・ログファイルに適切な書き込み権限があるか確認 ・SELinuxが有効な場合、ログファイルへの書き込みを妨げている可能性 特に後者はうっかりハマりやすいところなので、調べてみると良いでしょう。
mike2mike4

2024/07/08 14:05

あ、エラーログそのものは吐かれているという認識で良いですか? ログにエラーが載らないということで?
wozniac777

2024/07/08 23:24

mike2mike4さん、ありがとうございます。 エラーは吐かれているのですが、肝心なエラーが見つからないのです。 ・ログファイルに適切な書き込み権限があるか確認 ・SELinuxが有効な場合、ログファイルへの書き込みを妨げている可能性 こういった可能性を指摘してくださるだけでありがたいです。調べてみます!! dameoさんが言われている通り、やはりエラーが正しく吐かれているのかについて、構成が必要なのでしょうか?勝手な判断で不要な情報だと思ってしまいました。 ConoHaVPS環境構築(CentOS Stream9)+Flask+Nginx+uWSGI(Emperor)、・CentOS Stream release 9、・Python 3.9.14となっております。他にも必要な情報があればご教授いただければ幸いです。
wozniac777

2024/07/08 23:29

/var/log/nginxのエラーは error:1C800066:Provider routines::cipher operation failed error:0A000119:SSL routines::decryption failed or bad record mac error:0A000139:SSL routines::record layer failure) while SSL handshaking, client: 44.220.185.88, server: 0.0.0.0:443 2024/07/08 09:41:28 [notice] 1284821#1284821: signal 15 (SIGTERM) received from だけが出ている状況です。 何度かファイルのアップロードを忘れてインターナルサーバーエラーが出ましたが、その内容など他のエラーは一切出ていません。 上のエラーは調べてみるとサイバー攻撃を受けていると書かれていました。むしろ、防げている証拠と書かれていたので安心しました。
wozniac777

2024/07/09 00:58

調べてみました ・ログファイルに書き込み権限があるか? cd /var/log/nginx # ls -l -rw-r--r-- 1 root root 28998846 Jul 9 09:35 access.log -rw-r--r-- 1 root root 588655 Jul 8 11:32 error.log ・SELinuxが有効ではないか? # getenforce または # sestatus →Disabled となっています。
dodox86

2024/07/09 11:57

先の以下の質問の自己解決回答をみると、nginxをリバースプロキシとしてuwsgiを使いなのですよね。だとするとflaskアプリ側のエラーは、nginxのログには出力されないのではないでしょうか。nginx側のログにはせいぜいHTTPステータス50x系のエラーな気がします。 [SSL設定をしたのですが、表示が404 Not Found] https://teratail.com/questions/1cthlmjgmzgy00 更に、先の以下のご質問を見ると、uWSGI用にiniファイルを作られているのですよね。app_uwsgi.iniでしょうか? [uWsgiを毎回、再起動しなければサイトが更新されません] https://teratail.com/questions/iyr2iyx806t5rm#reply-v0mn9e43wa2yug そのiniファイルにログ出力用の設定を追加すれば良いのではないでしょうか。例えばlogtoとか? https://uwsgi-docs.readthedocs.io/en/latest/Logging.html#logging-to-files ※気になったこと: 別回答者さんのコメントにて指摘されていますが、ご質問の問題を第三者が検討するには確かに必要な情報が少なすぎるようです。特にサーバー関連の設定ファイルの提示や、場合によりインストールした手順の提示が必要です。全てさらす訳にもいかないでしょうし、その取捨選択も判断が難しいとは思いますが、そういったことをおろそかにするとコメントや回答が離れていきがちです。「あそこなんじゃないかな?」と目星がついても、コメントも無しに離れていく潜在的な回答者は多いと思います。 少し辛辣なコメントとなり恐縮ですが、いち回答者としての意見として捉えていただけますと幸いです。
mike2mike4

2024/07/09 12:29

すみません、flaskは知らないので回答はできかねます。 dodox86さんがご教示されたように、app_uwsgi.iniという設定ファイルにログの出力先が書いてある可能性が強いので、そちらを見てください。
wozniac777

2024/07/09 12:38

物凄く参考になりました。 nginxのエラーログはあるのにuWSGIのエラーログが見当たらないのでuWSGIからエラーログを出す方法があるのではと思っていました。 > そのiniファイルにログ出力用の設定を追加すれば良いのではないでしょうか。例えばlogtoとか? まさに、納得の答えです。早速、調べてみます。 ちょっと今回の件で、あまりこちらで質問するのは控えようと思います。まだ、質問の仕方など知識や経験が足りないようです。今、経験豊富なMENTAの方に契約を提案してある最中です。 この様な情報から答えを導いて下さりありがとうございます。しかも、何度も助けて頂き感謝で一杯です。ありがとうございます。全然、辛辣なコメントではないです。全て僕の成長のためを思って気を遣いつつコメントしているのが分かります。
wozniac777

2024/07/09 12:40

mike2mike4さん、ありがとうございます! 明日、早速試してみます。
wozniac777

2024/07/09 14:27

app_uwsgi.iniを調べたところlogtoの記述はありました。 #location of log files logto = /var/log/uwsgi/%n.log app_uwsgi.log emperor.log この二つのログが吐かれています。 Flaskのエラーログが怪しいです。 みなさんのおかげでたどり着けそうです。ありがとうございます。もう少し調べてみます。
wozniac777

2024/07/12 00:54

PythonやFlaskのロギングを調べてみたのですが、どうも独自でログを出すような仕組みのようですので、いつもローカル開発でコンソールに出てくる標準のエラーではなさそうです。MENTAで契約しましたので、解決出来ましたら、ここで報告させていただきます。
guest

回答2

0

自己解決

知識のある方から、uWsgiからエラーログが出ると教えてもらい、かなり試行錯誤したのですが実現できず、FLASKやpythonのロギング機能を使って一応は実現したいことを実現できました。本来のやり方ではないかもしれませんが、以下に解決方法を書いておきます。main.pyにて追記。

ロギング(Flask)

#app.logger.setLevel(logging.INFO)
#log_handler = logging.FileHandler('flask_error.log')
#log_handler.setLevel(logging.DEBUG)
#app.logger.addHandler(log_handler)

ロギングデフォルト設定(Flask、python共通)

logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p' , filename='/var/log/py-error.log', level=logging.INFO)

コメントをくださった方々、本当にありがとうございました。

投稿2024/07/14 05:54

wozniac777

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

回答ではありません

他の回答者さんが困らないように、dockerでnginx-uwsgi-flask-sampleアプリが動くような、調査環境構築用スクリプトだけ置いておきます。これを元にした環境は、インターネット環境には絶対に置かないでください。

bash

1cat >docker-compose.yml <<EOF 2services: 3 nginx: 4 image: nginx 5 restart: always 6 volumes: 7 - ./static:/var/www/html 8 - ./default.conf:/etc/nginx/conf.d/default.conf 9 ports: 10 - 80:80 11 python: 12 image: python 13 restart: always 14 volumes: 15 - ./python:/home/python 16 - ./initial_data:/home/initial_data 17 entrypoint: /home/initial_data/docker-entrypoint.sh 18EOF 19cat >default.conf <<EOF 20server { 21 listen 80 default_server; 22 listen [::]:80 default_server; 23 server_name localhost; 24 location / { 25 root /var/www/html; 26 index index.html index.htm; 27 } 28 location /app { 29 include uwsgi_params; 30 uwsgi_pass python:3031; 31 } 32} 33EOF 34mkdir initial_data 35cat >initial_data/docker-entrypoint.sh <<EOF 36#!/bin/sh 37if [ ! -f /home/python/flask/env/bin/uwsgi ]; then 38 cd /home/python 39 python3 -m venv env 40 . env/bin/activate 41 pip install -U pip 42 pip install flask uwsgi 43 cp -p /home/initial_data/uwsgi.ini . 44 mkdir flask 45 cd flask 46 cp -p /home/initial_data/app.py . 47 cd .. 48 chown -R 1000:1000 . 49fi 50exec /home/python/env/bin/uwsgi /home/python/uwsgi.ini 51EOF 52chmod u+x initial_data/docker-entrypoint.sh 53cat >initial_data/uwsgi.ini <<EOF 54[uwsgi] 55socket = :3031 56uid = 1000 57gid = 1000 58chdir = /home/python/flask 59wsgi-file = app.py 60EOF 61cat >initial_data/app.py <<EOF 62from flask import Flask 63application = Flask(__name__) 64@application.route("/app/error") 65def raise_exception(): 66 raise Exception("Error!!!!!!!") 67@application.route("/app") 68def hello_world(): 69 return "<p>Hello, World!</p>" 70EOF 71mkdir python static 72docker compose up -d 73while ! wget -O - --retry-connrefused 'http://localhost/app';do 74 sleep 1 75done 76wget -O - 'http://localhost/app/error' 77docker compose logs python 78docker compose down

投稿2024/07/08 15:56

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wozniac777

2024/07/08 23:37

dameoさん、ありがとうございます。
退会済みユーザー

退会済みユーザー

2024/07/09 01:14

あなたのためではないので、読む必要はありません。複製・実行もしないでくださいね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問